mirror of
https://github.com/pretix/pretix.git
synced 2026-08-08 10:27:49 +00:00
Compare commits
130
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6920b602ad | ||
|
|
00c78a2ed3 | ||
|
|
dff26910e5 | ||
|
|
add02262fc | ||
|
|
f86621a6ec | ||
|
|
e61f8035d3 | ||
|
|
fc4a9406e1 | ||
|
|
9d2ef94389 | ||
|
|
c060322f2f | ||
|
|
7629bbbb6a | ||
|
|
21d084c3fa | ||
|
|
b8d09a15e2 | ||
|
|
af2d35cc5a | ||
|
|
cbe18608e4 | ||
|
|
37d0a0de22 | ||
|
|
3bebdb3e28 | ||
|
|
4ad6a92f1d | ||
|
|
a34b6a04ea | ||
|
|
39e5711e95 | ||
|
|
6d422f9ae4 | ||
|
|
ccf4cbfd63 | ||
|
|
132a9aa9f2 | ||
|
|
257bd17b4a | ||
|
|
10bfd51d99 | ||
|
|
50225fd2f4 | ||
|
|
cd4fc1d6d8 | ||
|
|
4931059da3 | ||
|
|
15d15f978f | ||
|
|
34dbbdd82f | ||
|
|
9a54823515 | ||
|
|
4c76bb85a8 | ||
|
|
ed01a149b7 | ||
|
|
89adcc11c6 | ||
|
|
7037f348bf | ||
|
|
e694d3ca14 | ||
|
|
f3e1fd9135 | ||
|
|
850552c235 | ||
|
|
fb8a8142d9 | ||
|
|
5416c0cdfd | ||
|
|
a2421f9c66 | ||
|
|
8d06c79dd9 | ||
|
|
08961091f6 | ||
|
|
a7cbcb29b5 | ||
|
|
11fede5432 | ||
|
|
b8b89f3040 | ||
|
|
3b30553880 | ||
|
|
dd441c09f7 | ||
|
|
31b2841c4f | ||
|
|
baab35b81f | ||
|
|
c488901dc5 | ||
|
|
2679f79c3b | ||
|
|
ca3570df11 | ||
|
|
5bd08061a1 | ||
|
|
724c7d572f | ||
|
|
75dd98519f | ||
|
|
9bf4466732 | ||
|
|
ed9250c522 | ||
|
|
b3974067a5 | ||
|
|
cd6fbd886c | ||
|
|
0bb390f0a9 | ||
|
|
0183f3d40f | ||
|
|
82fcc4fe42 | ||
|
|
d42f8ece53 | ||
|
|
a8bffbd402 | ||
|
|
991b116026 | ||
|
|
2374d9b78c | ||
|
|
80785bee54 | ||
|
|
ea530ac6bf | ||
|
|
2dd8cc82f2 | ||
|
|
38fae12c37 | ||
|
|
e34a3ab2ce | ||
|
|
9401fbb1bc | ||
|
|
5d002d8b28 | ||
|
|
9b2c919026 | ||
|
|
e5ec1fd89a | ||
|
|
0f5c4b5cf5 | ||
|
|
c501066cff | ||
|
|
7ccb6682cf | ||
|
|
e5301dcdc5 | ||
|
|
4148cc4664 | ||
|
|
49057590f1 | ||
|
|
fc18659196 | ||
|
|
0c721c17e5 | ||
|
|
422567a6b7 | ||
|
|
0fcaeda0e9 | ||
|
|
ad8ed599dc | ||
|
|
4c2efa0a97 | ||
|
|
6efcd4b983 | ||
|
|
c29b7f28f1 | ||
|
|
871a8a2620 | ||
|
|
b7803565d6 | ||
|
|
f3b6627e63 | ||
|
|
574513550d | ||
|
|
f145d447a2 | ||
|
|
72b9b49b9d | ||
|
|
6d20d0e840 | ||
|
|
4a662a1aa1 | ||
|
|
8213b09847 | ||
|
|
c54f776b39 | ||
|
|
fdd03536f2 | ||
|
|
44303a0030 | ||
|
|
5ba10416ce | ||
|
|
efa117c836 | ||
|
|
70cd2265db | ||
|
|
b5afbfa1bf | ||
|
|
2dffe0e2c8 | ||
|
|
df0e0f9115 | ||
|
|
2fc47c5d71 | ||
|
|
c23d2e5504 | ||
|
|
58c7e3d316 | ||
|
|
2d5c3fbea6 | ||
|
|
222851620e | ||
|
|
9ac772b2f3 | ||
|
|
1408f31ec5 | ||
|
|
04f32284a8 | ||
|
|
318b80c3a5 | ||
|
|
102d172942 | ||
|
|
c084698821 | ||
|
|
edffe5c9dd | ||
|
|
09e9273a57 | ||
|
|
24ac588119 | ||
|
|
d23735b1a6 | ||
|
|
d8156186d8 | ||
|
|
abab7e5bc6 | ||
|
|
f89a33862a | ||
|
|
deb7cfa899 | ||
|
|
3f00fa58a0 | ||
|
|
49c0f6b967 | ||
|
|
fe9a7eaa24 | ||
|
|
ebac7d563c |
@@ -80,17 +80,12 @@ lines list of objects The actual invo
|
|||||||
for all invoice lines
|
for all invoice lines
|
||||||
created before this field was introduced as well as for
|
created before this field was introduced as well as for
|
||||||
all lines not created by a fee (e.g. a product).
|
all lines not created by a fee (e.g. a product).
|
||||||
├ event_date_from datetime Start date of the (sub)event this line was created for as it
|
├ period_start datetime Start date of the service or delivery period of the invoice line.
|
||||||
was set during invoice creation. Can be ``null`` for all invoice
|
Can be ``null`` if not known.
|
||||||
lines created before this was introduced as well as for lines in
|
├ period_end datetime End date of the service or delivery period of the invoice line.
|
||||||
an event series not created by a product (e.g. shipping or
|
Can be ``null`` if not known.
|
||||||
cancellation fees).
|
├ event_date_from datetime Deprecated alias of ``period_start``.
|
||||||
├ event_date_to datetime End date of the (sub)event this line was created for as it
|
├ event_date_to datetime Deprecated alias of ``period_end``.
|
||||||
was set during invoice creation. Can be ``null`` for all invoice
|
|
||||||
lines created before this was introduced as well as for lines in
|
|
||||||
an event series not created by a product (e.g. shipping or
|
|
||||||
cancellation fees) as well as whenever the respective (sub)event
|
|
||||||
has no end date set.
|
|
||||||
├ event_location string Location of the (sub)event this line was created for as it
|
├ event_location string Location of the (sub)event this line was created for as it
|
||||||
was set during invoice creation. Can be ``null`` for all invoice
|
was set during invoice creation. Can be ``null`` for all invoice
|
||||||
lines created before this was introduced as well as for lines in
|
lines created before this was introduced as well as for lines in
|
||||||
@@ -163,10 +158,10 @@ transmission_email_address string Optional. An em
|
|||||||
Business customers only.
|
Business customers only.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
PEPPOL
|
Peppol
|
||||||
""""""
|
""""""
|
||||||
|
|
||||||
The identifier ``"peppol"`` represents the transmission of XML invoices through the `PEPPOL`_ network.
|
The identifier ``"peppol"`` represents the transmission of XML invoices through the `Peppol`_ network.
|
||||||
This is only available for business addresses.
|
This is only available for business addresses.
|
||||||
This is not supported by pretix out of the box and requires the use of a suitable plugin.
|
This is not supported by pretix out of the box and requires the use of a suitable plugin.
|
||||||
The ``transmission_info`` object may contain the following properties:
|
The ``transmission_info`` object may contain the following properties:
|
||||||
@@ -176,7 +171,7 @@ The ``transmission_info`` object may contain the following properties:
|
|||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
Field Type Description
|
Field Type Description
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
transmission_peppol_participant_id string Required. The PEPPOL participant ID of the recipient.
|
transmission_peppol_participant_id string Required. The Peppol participant ID of the recipient.
|
||||||
===================================== ========================== =======================================================
|
===================================== ========================== =======================================================
|
||||||
|
|
||||||
Italian Exchange System
|
Italian Exchange System
|
||||||
@@ -274,6 +269,8 @@ List of all invoices
|
|||||||
"fee_internal_type": null,
|
"fee_internal_type": null,
|
||||||
"event_date_from": "2017-12-27T10:00:00Z",
|
"event_date_from": "2017-12-27T10:00:00Z",
|
||||||
"event_date_to": null,
|
"event_date_to": null,
|
||||||
|
"period_start": "2017-12-27T10:00:00Z",
|
||||||
|
"period_end": "2017-12-27T10:00:00Z",
|
||||||
"event_location": "Heidelberg",
|
"event_location": "Heidelberg",
|
||||||
"attendee_name": null,
|
"attendee_name": null,
|
||||||
"gross_value": "23.00",
|
"gross_value": "23.00",
|
||||||
@@ -420,6 +417,8 @@ Fetching individual invoices
|
|||||||
"fee_internal_type": null,
|
"fee_internal_type": null,
|
||||||
"event_date_from": "2017-12-27T10:00:00Z",
|
"event_date_from": "2017-12-27T10:00:00Z",
|
||||||
"event_date_to": null,
|
"event_date_to": null,
|
||||||
|
"period_start": "2017-12-27T10:00:00Z",
|
||||||
|
"period_end": "2017-12-27T10:00:00Z",
|
||||||
"event_location": "Heidelberg",
|
"event_location": "Heidelberg",
|
||||||
"attendee_name": null,
|
"attendee_name": null,
|
||||||
"gross_value": "23.00",
|
"gross_value": "23.00",
|
||||||
@@ -605,5 +604,5 @@ but in other cases transmission may need to be triggered manually.
|
|||||||
:statuscode 409: The invoice is currently in transmission
|
:statuscode 409: The invoice is currently in transmission
|
||||||
|
|
||||||
|
|
||||||
.. _PEPPOL: https://en.wikipedia.org/wiki/PEPPOL
|
.. _Peppol: https://en.wikipedia.org/wiki/PEPPOL
|
||||||
.. _Sistema di Interscambio: https://it.wikipedia.org/wiki/Fattura_elettronica_in_Italia
|
.. _Sistema di Interscambio: https://it.wikipedia.org/wiki/Fattura_elettronica_in_Italia
|
||||||
@@ -418,6 +418,7 @@ List of all orders
|
|||||||
"seat": null,
|
"seat": null,
|
||||||
"checkins": [
|
"checkins": [
|
||||||
{
|
{
|
||||||
|
"id": 1337,
|
||||||
"list": 44,
|
"list": 44,
|
||||||
"type": "entry",
|
"type": "entry",
|
||||||
"gate": null,
|
"gate": null,
|
||||||
@@ -662,6 +663,7 @@ Fetching individual orders
|
|||||||
"seat": null,
|
"seat": null,
|
||||||
"checkins": [
|
"checkins": [
|
||||||
{
|
{
|
||||||
|
"id": 1337,
|
||||||
"list": 44,
|
"list": 44,
|
||||||
"type": "entry",
|
"type": "entry",
|
||||||
"gate": null,
|
"gate": null,
|
||||||
@@ -1632,6 +1634,7 @@ List of all order positions
|
|||||||
"blocked": null,
|
"blocked": null,
|
||||||
"checkins": [
|
"checkins": [
|
||||||
{
|
{
|
||||||
|
"id": 1337,
|
||||||
"list": 44,
|
"list": 44,
|
||||||
"type": "entry",
|
"type": "entry",
|
||||||
"gate": null,
|
"gate": null,
|
||||||
@@ -1760,6 +1763,7 @@ Fetching individual positions
|
|||||||
"seat": null,
|
"seat": null,
|
||||||
"checkins": [
|
"checkins": [
|
||||||
{
|
{
|
||||||
|
"id": 1337,
|
||||||
"list": 44,
|
"list": 44,
|
||||||
"type": "entry",
|
"type": "entry",
|
||||||
"gate": null,
|
"gate": null,
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ There are multiple signals that will be sent out in the ordering cycle:
|
|||||||
|
|
||||||
.. automodule:: pretix.base.signals
|
.. automodule:: pretix.base.signals
|
||||||
:no-index:
|
:no-index:
|
||||||
:members: validate_cart, validate_cart_addons, validate_order, order_valid_if_pending, order_fee_calculation, order_paid, order_placed, order_canceled, order_reactivated, order_expired, order_expiry_changed, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split, order_gracefully_delete, invoice_line_text
|
:members: validate_cart, validate_cart_addons, validate_order, order_valid_if_pending, order_fee_calculation, order_paid, order_placed, order_canceled, order_reactivated, order_expired, order_expiry_changed, order_modified, order_changed, order_approved, order_denied, order_fee_type_name, allow_ticket_download, order_split, order_gracefully_delete, build_invoice_data, invoice_line_text
|
||||||
|
|
||||||
Check-ins
|
Check-ins
|
||||||
"""""""""
|
"""""""""
|
||||||
@@ -37,7 +37,7 @@ Frontend
|
|||||||
--------
|
--------
|
||||||
|
|
||||||
.. automodule:: pretix.presale.signals
|
.. automodule:: pretix.presale.signals
|
||||||
:members: html_head, html_footer, footer_link, global_footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, contact_form_fields_overrides, question_form_fields_overrides, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, render_seating_plan, checkout_flow_steps, position_info, position_info_top, item_description, global_html_head, global_html_footer, global_html_page_header, seatingframe_html_head
|
:members: html_head, html_footer, footer_link, global_footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, contact_form_fields_overrides, question_form_fields_overrides, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, render_seating_plan, checkout_flow_steps, position_info, position_info_top, item_description, global_html_head, global_html_footer, global_html_page_header, seatingframe_html_head, filter_subevents
|
||||||
|
|
||||||
|
|
||||||
.. automodule:: pretix.presale.signals
|
.. automodule:: pretix.presale.signals
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ sphinxcontrib-images
|
|||||||
sphinxcontrib-jquery
|
sphinxcontrib-jquery
|
||||||
sphinxcontrib-spelling==8.*
|
sphinxcontrib-spelling==8.*
|
||||||
sphinxemoji
|
sphinxemoji
|
||||||
pyenchant==3.2.*
|
pyenchant==3.3.*
|
||||||
|
|||||||
@@ -7,4 +7,4 @@ sphinxcontrib-images
|
|||||||
sphinxcontrib-jquery
|
sphinxcontrib-jquery
|
||||||
sphinxcontrib-spelling==8.*
|
sphinxcontrib-spelling==8.*
|
||||||
sphinxemoji
|
sphinxemoji
|
||||||
pyenchant==3.2.*
|
pyenchant==3.3.*
|
||||||
|
|||||||
+10
-10
@@ -35,16 +35,16 @@ dependencies = [
|
|||||||
"cryptography>=44.0.0",
|
"cryptography>=44.0.0",
|
||||||
"css-inline==0.17.*",
|
"css-inline==0.17.*",
|
||||||
"defusedcsv>=1.1.0",
|
"defusedcsv>=1.1.0",
|
||||||
"Django[argon2]==4.2.*,>=4.2.15",
|
"Django[argon2]==4.2.*,>=4.2.25",
|
||||||
"django-bootstrap3==25.2",
|
"django-bootstrap3==25.2",
|
||||||
"django-compressor==4.5.1",
|
"django-compressor==4.5.1",
|
||||||
"django-countries==7.6.*",
|
"django-countries==7.6.*",
|
||||||
"django-filter==25.1",
|
"django-filter==25.1",
|
||||||
"django-formset-js-improved==0.5.0.3",
|
"django-formset-js-improved==0.5.0.4",
|
||||||
"django-formtools==2.5.1",
|
"django-formtools==2.5.1",
|
||||||
"django-hierarkey==2.0.*",
|
"django-hierarkey==2.0.*,>=2.0.1",
|
||||||
"django-hijack==3.7.*",
|
"django-hijack==3.7.*",
|
||||||
"django-i18nfield==1.10.*",
|
"django-i18nfield==1.11.*",
|
||||||
"django-libsass==0.9",
|
"django-libsass==0.9",
|
||||||
"django-localflavor==5.0",
|
"django-localflavor==5.0",
|
||||||
"django-markup",
|
"django-markup",
|
||||||
@@ -64,7 +64,7 @@ dependencies = [
|
|||||||
"kombu==5.5.*",
|
"kombu==5.5.*",
|
||||||
"libsass==0.23.*",
|
"libsass==0.23.*",
|
||||||
"lxml",
|
"lxml",
|
||||||
"markdown==3.8.2", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
"markdown==3.9", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||||
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
||||||
"mt-940==4.30.*",
|
"mt-940==4.30.*",
|
||||||
"oauthlib==3.3.*",
|
"oauthlib==3.3.*",
|
||||||
@@ -79,7 +79,7 @@ dependencies = [
|
|||||||
"protobuf==6.32.*",
|
"protobuf==6.32.*",
|
||||||
"psycopg2-binary",
|
"psycopg2-binary",
|
||||||
"pycountry",
|
"pycountry",
|
||||||
"pycparser==2.22",
|
"pycparser==2.23",
|
||||||
"pycryptodome==3.23.*",
|
"pycryptodome==3.23.*",
|
||||||
"pypdf==6.0.*",
|
"pypdf==6.0.*",
|
||||||
"python-bidi==0.6.*", # Support for Arabic in reportlab
|
"python-bidi==0.6.*", # Support for Arabic in reportlab
|
||||||
@@ -90,8 +90,8 @@ dependencies = [
|
|||||||
"qrcode==8.2",
|
"qrcode==8.2",
|
||||||
"redis==6.4.*",
|
"redis==6.4.*",
|
||||||
"reportlab==4.4.*",
|
"reportlab==4.4.*",
|
||||||
"requests==2.31.*",
|
"requests==2.32.*",
|
||||||
"sentry-sdk==2.35.*",
|
"sentry-sdk==2.38.*",
|
||||||
"sepaxml==2.6.*",
|
"sepaxml==2.6.*",
|
||||||
"stripe==7.9.*",
|
"stripe==7.9.*",
|
||||||
"text-unidecode==1.*",
|
"text-unidecode==1.*",
|
||||||
@@ -100,7 +100,7 @@ dependencies = [
|
|||||||
"ua-parser==1.0.*",
|
"ua-parser==1.0.*",
|
||||||
"vat_moss_forked==2020.3.20.0.11.0",
|
"vat_moss_forked==2020.3.20.0.11.0",
|
||||||
"vobject==0.9.*",
|
"vobject==0.9.*",
|
||||||
"webauthn==2.6.*",
|
"webauthn==2.7.*",
|
||||||
"zeep==4.3.*"
|
"zeep==4.3.*"
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ dev = [
|
|||||||
"pytest-cache",
|
"pytest-cache",
|
||||||
"pytest-cov",
|
"pytest-cov",
|
||||||
"pytest-django==4.*",
|
"pytest-django==4.*",
|
||||||
"pytest-mock==3.14.*",
|
"pytest-mock==3.15.*",
|
||||||
"pytest-sugar",
|
"pytest-sugar",
|
||||||
"pytest-xdist==3.8.*",
|
"pytest-xdist==3.8.*",
|
||||||
"pytest==8.4.*",
|
"pytest==8.4.*",
|
||||||
|
|||||||
+2
-2
@@ -25,8 +25,8 @@ coverage:
|
|||||||
coverage run -m py.test
|
coverage run -m py.test
|
||||||
|
|
||||||
npminstall:
|
npminstall:
|
||||||
# keep this in sync with setup.py!
|
# keep this in sync with pretix/_build.py!
|
||||||
mkdir -p pretix/static.dist/node_prefix/
|
mkdir -p pretix/static.dist/node_prefix/
|
||||||
cp -r pretix/static/npm_dir/* pretix/static.dist/node_prefix/
|
cp -r pretix/static/npm_dir/* pretix/static.dist/node_prefix/
|
||||||
npm install --prefix=pretix/static.dist/node_prefix
|
npm ci --prefix=pretix/static.dist/node_prefix
|
||||||
|
|
||||||
|
|||||||
@@ -19,4 +19,4 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# 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/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
__version__ = "2025.8.0.dev0"
|
__version__ = "2024.9.0.dev0"
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ def npm_install():
|
|||||||
node_prefix = os.path.join(here, 'static.dist', 'node_prefix')
|
node_prefix = os.path.join(here, 'static.dist', 'node_prefix')
|
||||||
os.makedirs(node_prefix, exist_ok=True)
|
os.makedirs(node_prefix, exist_ok=True)
|
||||||
shutil.copytree(os.path.join(here, 'static', 'npm_dir'), node_prefix, dirs_exist_ok=True)
|
shutil.copytree(os.path.join(here, 'static', 'npm_dir'), node_prefix, dirs_exist_ok=True)
|
||||||
subprocess.check_call('npm install', shell=True, cwd=node_prefix)
|
subprocess.check_call('npm ci', shell=True, cwd=node_prefix)
|
||||||
npm_installed = True
|
npm_installed = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -805,6 +805,7 @@ class EventSettingsSerializer(SettingsSerializer):
|
|||||||
'invoice_reissue_after_modify',
|
'invoice_reissue_after_modify',
|
||||||
'invoice_include_free',
|
'invoice_include_free',
|
||||||
'invoice_generate',
|
'invoice_generate',
|
||||||
|
'invoice_period',
|
||||||
'invoice_numbers_consecutive',
|
'invoice_numbers_consecutive',
|
||||||
'invoice_numbers_prefix',
|
'invoice_numbers_prefix',
|
||||||
'invoice_numbers_prefix_cancellations',
|
'invoice_numbers_prefix_cancellations',
|
||||||
|
|||||||
@@ -1757,12 +1757,14 @@ class LinePositionField(serializers.IntegerField):
|
|||||||
|
|
||||||
class InlineInvoiceLineSerializer(I18nAwareModelSerializer):
|
class InlineInvoiceLineSerializer(I18nAwareModelSerializer):
|
||||||
position = LinePositionField(read_only=True)
|
position = LinePositionField(read_only=True)
|
||||||
|
event_date_from = serializers.DateTimeField(read_only=True, source="period_start")
|
||||||
|
event_date_to = serializers.DateTimeField(read_only=True, source="period_end")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InvoiceLine
|
model = InvoiceLine
|
||||||
fields = ('position', 'description', 'item', 'variation', 'subevent', 'attendee_name', 'event_date_from',
|
fields = ('position', 'description', 'item', 'variation', 'subevent', 'attendee_name', 'event_date_from',
|
||||||
'event_date_to', 'gross_value', 'tax_value', 'tax_rate', 'tax_code', 'tax_name', 'fee_type',
|
'event_date_to', 'period_start', 'period_end', 'gross_value', 'tax_value', 'tax_rate', 'tax_code',
|
||||||
'fee_internal_type', 'event_location')
|
'tax_name', 'fee_type', 'fee_internal_type', 'event_location')
|
||||||
|
|
||||||
|
|
||||||
class InvoiceSerializer(I18nAwareModelSerializer):
|
class InvoiceSerializer(I18nAwareModelSerializer):
|
||||||
|
|||||||
@@ -484,6 +484,7 @@ class OrganizerSettingsSerializer(SettingsSerializer):
|
|||||||
'reusable_media_type_nfc_mf0aes',
|
'reusable_media_type_nfc_mf0aes',
|
||||||
'reusable_media_type_nfc_mf0aes_autocreate_giftcard',
|
'reusable_media_type_nfc_mf0aes_autocreate_giftcard',
|
||||||
'reusable_media_type_nfc_mf0aes_autocreate_giftcard_currency',
|
'reusable_media_type_nfc_mf0aes_autocreate_giftcard_currency',
|
||||||
|
'reusable_media_type_nfc_mf0aes_random_uid',
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|||||||
@@ -546,7 +546,8 @@ class DeviceViewSet(mixins.CreateModelMixin,
|
|||||||
|
|
||||||
|
|
||||||
class OrganizerSettingsView(views.APIView):
|
class OrganizerSettingsView(views.APIView):
|
||||||
permission = 'can_change_organizer_settings'
|
permission = None
|
||||||
|
write_permission = 'can_change_organizer_settings'
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
s = OrganizerSettingsSerializer(instance=request.organizer.settings, organizer=request.organizer, context={
|
s = OrganizerSettingsSerializer(instance=request.organizer.settings, organizer=request.organizer, context={
|
||||||
|
|||||||
@@ -252,9 +252,15 @@ class OutboundSyncProvider:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
with language(self.event.settings.locale):
|
with language(self.event.settings.locale):
|
||||||
raise SyncConfigError([_(
|
raise SyncConfigError([_(
|
||||||
'Field "{field_name}" is not valid for {available_inputs}. Please check your {provider_name} settings.'
|
'Field "{field_name}" does not exist. Please check your {provider_name} settings.'
|
||||||
).format(key=key, available_inputs="/".join(inputs.keys()), provider_name=self.display_name)])
|
).format(field_name=key, provider_name=self.display_name)])
|
||||||
input = inputs[field.required_input]
|
try:
|
||||||
|
input = inputs[field.required_input]
|
||||||
|
except KeyError:
|
||||||
|
with language(self.event.settings.locale):
|
||||||
|
raise SyncConfigError([_(
|
||||||
|
'Field "{field_name}" requires {required_input}, but only got {available_inputs}. Please check your {provider_name} settings.'
|
||||||
|
).format(field_name=key, required_input=field.required_input, available_inputs=", ".join(inputs.keys()), provider_name=self.display_name)])
|
||||||
val = field.getter(input)
|
val = field.getter(input)
|
||||||
if isinstance(val, list):
|
if isinstance(val, list):
|
||||||
if field.enum_opts and mapping_entry.get("value_map"):
|
if field.enum_opts and mapping_entry.get("value_map"):
|
||||||
|
|||||||
@@ -105,6 +105,18 @@ class BaseExporter:
|
|||||||
"""
|
"""
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def repeatable_read(self) -> bool:
|
||||||
|
"""
|
||||||
|
If ``True``, this exporter will be run in a REPEATABLE READ transaction. This ensures consistent results for
|
||||||
|
all queries performed by the exporter, but creates a performance burden on the database server. We recommend to
|
||||||
|
disable this for exporters that take very long to run and do not rely on this behavior, such as export of lists
|
||||||
|
to CSV files.
|
||||||
|
|
||||||
|
Defaults to ``True`` for now, but default may change in future versions.
|
||||||
|
"""
|
||||||
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def identifier(self) -> str:
|
def identifier(self) -> str:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter):
|
|||||||
'includes two sheets, one with a line for every invoice, and one with a line for every position of '
|
'includes two sheets, one with a line for every invoice, and one with a line for every position of '
|
||||||
'every invoice.')
|
'every invoice.')
|
||||||
featured = True
|
featured = True
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def additional_form_fields(self):
|
def additional_form_fields(self):
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ class OrderListExporter(MultiSheetListExporter):
|
|||||||
'with a line for every order, one with a line for every order position, and one with '
|
'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.')
|
'a line for every additional fee charged in an order.')
|
||||||
featured = True
|
featured = True
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def providers(self):
|
def providers(self):
|
||||||
@@ -842,6 +843,7 @@ class TransactionListExporter(ListExporter):
|
|||||||
description = gettext_lazy('Download a spreadsheet of all substantial changes to orders, i.e. all changes to '
|
description = gettext_lazy('Download a spreadsheet of all substantial changes to orders, i.e. all changes to '
|
||||||
'products, prices or tax rates. The information is only accurate for changes made with '
|
'products, prices or tax rates. The information is only accurate for changes made with '
|
||||||
'pretix versions released after October 2021.')
|
'pretix versions released after October 2021.')
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def providers(self):
|
def providers(self):
|
||||||
@@ -1020,6 +1022,7 @@ class PaymentListExporter(ListExporter):
|
|||||||
category = pgettext_lazy('export_category', 'Order data')
|
category = pgettext_lazy('export_category', 'Order data')
|
||||||
description = gettext_lazy('Download a spreadsheet of all payments or refunds of every order.')
|
description = gettext_lazy('Download a spreadsheet of all payments or refunds of every order.')
|
||||||
featured = True
|
featured = True
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def additional_form_fields(self):
|
def additional_form_fields(self):
|
||||||
@@ -1159,7 +1162,7 @@ class QuotaListExporter(ListExporter):
|
|||||||
yield headers
|
yield headers
|
||||||
|
|
||||||
quotas = list(self.event.quotas.select_related('subevent'))
|
quotas = list(self.event.quotas.select_related('subevent'))
|
||||||
qa = QuotaAvailability(full_results=True)
|
qa = QuotaAvailability(full_results=True, allow_repeatable_read=False)
|
||||||
qa.queue(*quotas)
|
qa.queue(*quotas)
|
||||||
qa.compute()
|
qa.compute()
|
||||||
|
|
||||||
@@ -1200,6 +1203,7 @@ class GiftcardTransactionListExporter(OrganizerLevelExportMixin, ListExporter):
|
|||||||
organizer_required_permission = 'can_manage_gift_cards'
|
organizer_required_permission = 'can_manage_gift_cards'
|
||||||
category = pgettext_lazy('export_category', 'Gift cards')
|
category = pgettext_lazy('export_category', 'Gift cards')
|
||||||
description = gettext_lazy('Download a spreadsheet of all gift card transactions.')
|
description = gettext_lazy('Download a spreadsheet of all gift card transactions.')
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def additional_form_fields(self):
|
def additional_form_fields(self):
|
||||||
@@ -1258,6 +1262,7 @@ class GiftcardRedemptionListExporter(ListExporter):
|
|||||||
verbose_name = gettext_lazy('Gift card redemptions')
|
verbose_name = gettext_lazy('Gift card redemptions')
|
||||||
category = pgettext_lazy('export_category', 'Order data')
|
category = pgettext_lazy('export_category', 'Order data')
|
||||||
description = gettext_lazy('Download a spreadsheet of all payments or refunds that involve gift cards.')
|
description = gettext_lazy('Download a spreadsheet of all payments or refunds that involve gift cards.')
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
def iterate_list(self, form_data):
|
def iterate_list(self, form_data):
|
||||||
payments = OrderPayment.objects.filter(
|
payments = OrderPayment.objects.filter(
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter):
|
|||||||
verbose_name = _('Reusable media')
|
verbose_name = _('Reusable media')
|
||||||
category = pgettext_lazy('export_category', 'Reusable media')
|
category = pgettext_lazy('export_category', 'Reusable media')
|
||||||
description = _('Download a spread sheet with the data of all reusable medias on your account.')
|
description = _('Download a spread sheet with the data of all reusable medias on your account.')
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
def iterate_list(self, form_data):
|
def iterate_list(self, form_data):
|
||||||
media = ReusableMedium.objects.filter(
|
media = ReusableMedium.objects.filter(
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class WaitingListExporter(ListExporter):
|
|||||||
verbose_name = _('Waiting list')
|
verbose_name = _('Waiting list')
|
||||||
category = pgettext_lazy('export_category', 'Waiting list')
|
category = pgettext_lazy('export_category', 'Waiting list')
|
||||||
description = _('Download a spread sheet with all your waiting list data.')
|
description = _('Download a spread sheet with all your waiting list data.')
|
||||||
|
repeatable_read = False
|
||||||
|
|
||||||
# map selected status to label and queryset-filter
|
# map selected status to label and queryset-filter
|
||||||
status_filters = [
|
status_filters = [
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.utils.translation import pgettext_lazy
|
from django.utils.translation import pgettext, pgettext_lazy
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from localflavor.it.forms import ITSocialSecurityNumberField
|
from localflavor.it.forms import ITSocialSecurityNumberField
|
||||||
|
|
||||||
@@ -73,3 +73,12 @@ class ItalianSdITransmissionType(TransmissionType):
|
|||||||
if is_business:
|
if is_business:
|
||||||
return base | {"company", "vat_id", "transmission_it_sdi_pec", "transmission_it_sdi_recipient_code"}
|
return base | {"company", "vat_id", "transmission_it_sdi_pec", "transmission_it_sdi_recipient_code"}
|
||||||
return base | {"transmission_it_sdi_codice_fiscale"}
|
return base | {"transmission_it_sdi_codice_fiscale"}
|
||||||
|
|
||||||
|
def pdf_info_text(self) -> str:
|
||||||
|
# Watermark is not necessary as this is a usual precaution in Italy
|
||||||
|
return pgettext(
|
||||||
|
"italian_invoice",
|
||||||
|
"This PDF document is a visual copy of the invoice and does not constitute an invoice for VAT "
|
||||||
|
"purposes. The invoice is issued in XML format, transmitted in accordance with the procedures and terms "
|
||||||
|
"set forth in No. 89757/2018 of April 30, 2018, issued by the Director of the Revenue Agency."
|
||||||
|
)
|
||||||
|
|||||||
@@ -19,7 +19,9 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
# 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/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
import math
|
||||||
import re
|
import re
|
||||||
import unicodedata
|
import unicodedata
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
@@ -223,6 +225,9 @@ class BaseReportlabInvoiceRenderer(BaseInvoiceRenderer):
|
|||||||
stylesheet.add(ParagraphStyle(name='FineprintHeading', fontName=self.font_bold, fontSize=8, leading=12))
|
stylesheet.add(ParagraphStyle(name='FineprintHeading', fontName=self.font_bold, fontSize=8, leading=12))
|
||||||
stylesheet.add(ParagraphStyle(name='Fineprint', fontName=self.font_regular, fontSize=8, leading=10))
|
stylesheet.add(ParagraphStyle(name='Fineprint', fontName=self.font_regular, fontSize=8, leading=10))
|
||||||
stylesheet.add(ParagraphStyle(name='FineprintRight', fontName=self.font_regular, fontSize=8, leading=10, alignment=TA_RIGHT))
|
stylesheet.add(ParagraphStyle(name='FineprintRight', fontName=self.font_regular, fontSize=8, leading=10, alignment=TA_RIGHT))
|
||||||
|
stylesheet.add(ParagraphStyle(name='WarningBlock', fontName=self.font_bold, fontSize=10, leading=12,
|
||||||
|
alignment=TA_LEFT, borderWidth=1 * mm, borderColor=colors.black,
|
||||||
|
borderPadding=2 * mm, spaceBefore=5 * mm, spaceAfter=5 * mm))
|
||||||
return stylesheet
|
return stylesheet
|
||||||
|
|
||||||
def _register_fonts(self):
|
def _register_fonts(self):
|
||||||
@@ -522,6 +527,20 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
textobject.textLine(self._normalize(self._upper(pgettext('invoice', 'Event'))))
|
textobject.textLine(self._normalize(self._upper(pgettext('invoice', 'Event'))))
|
||||||
canvas.drawText(textobject)
|
canvas.drawText(textobject)
|
||||||
|
|
||||||
|
def _date_range_in_header(self):
|
||||||
|
if self.invoice.event.has_subevents or not self.invoice.event.settings.show_dates_on_frontpage:
|
||||||
|
return None, None
|
||||||
|
tz = self.invoice.event.timezone
|
||||||
|
show_end_date = (
|
||||||
|
self.invoice.event.settings.show_date_to and
|
||||||
|
self.invoice.event.date_to and
|
||||||
|
self.invoice.event.date_to.astimezone(tz).date() != self.invoice.event.date_from.astimezone(tz).date()
|
||||||
|
)
|
||||||
|
if show_end_date:
|
||||||
|
return self.invoice.event.date_from.astimezone(tz).date(), self.invoice.event.date_to.astimezone(tz).date()
|
||||||
|
else:
|
||||||
|
return self.invoice.event.date_from.astimezone(tz).date(), None
|
||||||
|
|
||||||
def _draw_event(self, canvas):
|
def _draw_event(self, canvas):
|
||||||
def shorten(txt):
|
def shorten(txt):
|
||||||
txt = str(txt)
|
txt = str(txt)
|
||||||
@@ -535,25 +554,17 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
p_size = p.wrap(self.event_width, self.event_height)
|
p_size = p.wrap(self.event_width, self.event_height)
|
||||||
return txt
|
return txt
|
||||||
|
|
||||||
if not self.invoice.event.has_subevents and self.invoice.event.settings.show_dates_on_frontpage:
|
d_from, d_to = self._date_range_in_header()
|
||||||
tz = self.invoice.event.timezone
|
if d_from and d_to:
|
||||||
show_end_date = (
|
p_str = (
|
||||||
self.invoice.event.settings.show_date_to and
|
shorten(self.invoice.event.name) + '\n' +
|
||||||
self.invoice.event.date_to and
|
pgettext('invoice', '{from_date}\nuntil {to_date}').format(
|
||||||
self.invoice.event.date_to.astimezone(tz).date() != self.invoice.event.date_from.astimezone(tz).date()
|
from_date=date_format(d_from, "DATE_FORMAT"),
|
||||||
|
to_date=date_format(d_to, "DATE_FORMAT"),
|
||||||
|
)
|
||||||
)
|
)
|
||||||
if show_end_date:
|
elif d_from:
|
||||||
p_str = (
|
p_str = shorten(self.invoice.event.name) + '\n' + date_format(d_from, "DATE_FORMAT")
|
||||||
shorten(self.invoice.event.name) + '\n' +
|
|
||||||
pgettext('invoice', '{from_date}\nuntil {to_date}').format(
|
|
||||||
from_date=self.invoice.event.get_date_from_display(show_times=False),
|
|
||||||
to_date=self.invoice.event.get_date_to_display(show_times=False)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
p_str = (
|
|
||||||
shorten(self.invoice.event.name) + '\n' + self.invoice.event.get_date_from_display(show_times=False)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
p_str = shorten(self.invoice.event.name)
|
p_str = shorten(self.invoice.event.name)
|
||||||
|
|
||||||
@@ -576,11 +587,28 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
canvas.drawRightString(self.pagesize[0] - 20 * mm, (297 - 100) * mm, self._normalize(gettext('TEST MODE')))
|
canvas.drawRightString(self.pagesize[0] - 20 * mm, (297 - 100) * mm, self._normalize(gettext('TEST MODE')))
|
||||||
canvas.restoreState()
|
canvas.restoreState()
|
||||||
|
|
||||||
|
def _draw_watermark(self, canvas):
|
||||||
|
watermark = self.invoice.transmission_type_instance.pdf_watermark()
|
||||||
|
if watermark:
|
||||||
|
canvas.saveState()
|
||||||
|
for font_size in range(200, 20, -10):
|
||||||
|
width = stringWidth(watermark, self.font_bold, font_size)
|
||||||
|
if width < self.pagesize[0]:
|
||||||
|
break
|
||||||
|
|
||||||
|
canvas.translate(self.pagesize[0] / 2, self.pagesize[1] / 2)
|
||||||
|
canvas.rotate(math.atan(self.pagesize[1] / self.pagesize[0]) / math.pi * 180)
|
||||||
|
canvas.setFont(self.font_bold, font_size)
|
||||||
|
canvas.setFillColorRGB(.92, .92, .92)
|
||||||
|
canvas.drawCentredString(0, - font_size / 2, self._normalize(watermark))
|
||||||
|
canvas.restoreState()
|
||||||
|
|
||||||
def _on_first_page(self, canvas: Canvas, doc):
|
def _on_first_page(self, canvas: Canvas, doc):
|
||||||
canvas.setCreator('pretix.eu')
|
canvas.setCreator('pretix.eu')
|
||||||
canvas.setTitle(pgettext('invoice', 'Invoice {num}').format(num=self.invoice.number))
|
canvas.setTitle(pgettext('invoice', 'Invoice {num}').format(num=self.invoice.number))
|
||||||
|
|
||||||
canvas.saveState()
|
canvas.saveState()
|
||||||
|
self._draw_watermark(canvas)
|
||||||
self._draw_footer(canvas)
|
self._draw_footer(canvas)
|
||||||
self._draw_testmode(canvas)
|
self._draw_testmode(canvas)
|
||||||
self._draw_invoice_from_label(canvas)
|
self._draw_invoice_from_label(canvas)
|
||||||
@@ -610,6 +638,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
|
|
||||||
def _get_intro(self):
|
def _get_intro(self):
|
||||||
story = []
|
story = []
|
||||||
|
|
||||||
|
type_info_text = self.invoice.transmission_type_instance.pdf_info_text()
|
||||||
|
if type_info_text:
|
||||||
|
story.append(FontFallbackParagraph(
|
||||||
|
type_info_text,
|
||||||
|
self.stylesheet['WarningBlock']
|
||||||
|
))
|
||||||
|
|
||||||
if self.invoice.custom_field:
|
if self.invoice.custom_field:
|
||||||
story.append(FontFallbackParagraph(
|
story.append(FontFallbackParagraph(
|
||||||
'{}: {}'.format(
|
'{}: {}'.format(
|
||||||
@@ -656,7 +692,14 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
return story
|
return story
|
||||||
|
|
||||||
def _get_story(self, doc):
|
def _get_story(self, doc):
|
||||||
has_taxes = any(il.tax_value for il in self.invoice.lines.all()) or self.invoice.reverse_charge
|
all_lines = list(self.invoice.lines.all())
|
||||||
|
has_taxes = any(il.tax_value for il in all_lines) or self.invoice.reverse_charge
|
||||||
|
header_dates = self._date_range_in_header()
|
||||||
|
tz = self.invoice.event.timezone
|
||||||
|
has_multiple_service_dates = len(set(
|
||||||
|
(il.period_start, il.period_end) for il in all_lines
|
||||||
|
)) > 1
|
||||||
|
request_show_service_date = False
|
||||||
|
|
||||||
story = [
|
story = [
|
||||||
NextPageTemplate('FirstPage'),
|
NextPageTemplate('FirstPage'),
|
||||||
@@ -700,15 +743,75 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
)]
|
)]
|
||||||
|
|
||||||
def _group_key(line):
|
def _group_key(line):
|
||||||
return (line.description, line.tax_rate, line.tax_name, line.net_value, line.gross_value, line.subevent_id,
|
return (line.description, line.tax_rate, line.tax_name, line.net_value, line.gross_value, line.subevent,
|
||||||
line.event_date_from, line.event_date_to)
|
line.period_start, line.period_end)
|
||||||
|
|
||||||
|
def day(dt: datetime.datetime) -> datetime.date:
|
||||||
|
if dt is None:
|
||||||
|
return None
|
||||||
|
return dt.astimezone(tz).date()
|
||||||
|
|
||||||
total = Decimal('0.00')
|
total = Decimal('0.00')
|
||||||
for (description, tax_rate, tax_name, net_value, gross_value, *ignored), lines in addon_aware_groupby(
|
for (description, tax_rate, tax_name, net_value, gross_value, subevent, period_start, period_end), lines in addon_aware_groupby(
|
||||||
self.invoice.lines.all(),
|
all_lines,
|
||||||
key=_group_key,
|
key=_group_key,
|
||||||
is_addon=lambda l: l.description.startswith(" +"),
|
is_addon=lambda l: l.description.startswith(" +"),
|
||||||
):
|
):
|
||||||
|
# Try to be clever and figure out when organizers would want to show the period. This heuristic is
|
||||||
|
# not perfect and the only "fully correct" way would be to include the period on every line always,
|
||||||
|
# however this will cause confusion (a) due to useless repetition of the same date all over the invoice
|
||||||
|
# (b) due to not respecting the show_date_to setting of events in cases where we could have respected it.
|
||||||
|
# Still, we want to show the date explicitly if its different to the event or invoice date.
|
||||||
|
period_start_day = day(period_start)
|
||||||
|
period_end_day = day(period_end)
|
||||||
|
if period_start and period_end and period_end_day != period_start_day:
|
||||||
|
# It's a multi-day period, such as the validity of the ticket or an event date period
|
||||||
|
|
||||||
|
if period_start_day == header_dates[0] and period_end_day == header_dates[1]:
|
||||||
|
# This is the exact event period we already printed in the header, no need to repeat it.
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
elif (self.event.has_subevents and subevent and day(subevent.date_from) == period_start_day and
|
||||||
|
day(subevent.date_to) == period_end_day):
|
||||||
|
# For subevents, build_invoice already includes the date in the description in the event-default format.
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
else:
|
||||||
|
period_line = f"{date_format(period_start_day, 'SHORT_DATE_FORMAT')} – {date_format(period_end_day, 'SHORT_DATE_FORMAT')}"
|
||||||
|
|
||||||
|
elif period_start or period_end:
|
||||||
|
# It's a single-day period
|
||||||
|
|
||||||
|
delivery_day = period_end_day or period_start_day
|
||||||
|
if delivery_day in header_dates:
|
||||||
|
# This is the event date we already printed in the header, no need to repeat it.
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
elif self.event.has_subevents and subevent and delivery_day in (day(subevent.date_from), day(subevent.date_to)):
|
||||||
|
# For subevents, build_invoice already includes the date in the description in the event-default format.
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
elif (delivery_day == self.invoice.date) and header_dates[0] is None:
|
||||||
|
# This is a shop that doesn't show the date of the event in the header, and the period is the invoice
|
||||||
|
# date. We assume that this is an 'everything is executed immediately' situation and do not want to
|
||||||
|
# confuse with showing additional dates on the invoice. This is the case that is not guaranteed to be
|
||||||
|
# correct in all cases and might need to change in the future. If customers have legal concerns, a
|
||||||
|
# quick fix is including a sentence like "Delivery date is the invoice date unless otherwise indicated:"
|
||||||
|
# in a custom text on the invoice.
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
else:
|
||||||
|
period_line = date_format(delivery_day, 'SHORT_DATE_FORMAT')
|
||||||
|
else:
|
||||||
|
# No period known
|
||||||
|
period_line = ""
|
||||||
|
|
||||||
|
if not has_multiple_service_dates and period_line:
|
||||||
|
# Group together at the end of the invoice
|
||||||
|
request_show_service_date = period_line
|
||||||
|
elif period_line:
|
||||||
|
description += "\n" + period_line
|
||||||
|
|
||||||
lines = list(lines)
|
lines = list(lines)
|
||||||
if has_taxes:
|
if has_taxes:
|
||||||
if len(lines) > 1:
|
if len(lines) > 1:
|
||||||
@@ -717,6 +820,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
gross_price=money_filter(gross_value, self.invoice.event.currency),
|
gross_price=money_filter(gross_value, self.invoice.event.currency),
|
||||||
)
|
)
|
||||||
description = description + "\n" + single_price_line
|
description = description + "\n" + single_price_line
|
||||||
|
|
||||||
tdata.append((
|
tdata.append((
|
||||||
FontFallbackParagraph(
|
FontFallbackParagraph(
|
||||||
self._clean_text(description, tags=['br']),
|
self._clean_text(description, tags=['br']),
|
||||||
@@ -821,6 +925,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
|||||||
|
|
||||||
story.append(Spacer(1, 10 * mm))
|
story.append(Spacer(1, 10 * mm))
|
||||||
|
|
||||||
|
if request_show_service_date:
|
||||||
|
story.append(FontFallbackParagraph(
|
||||||
|
self._normalize(pgettext('invoice', 'Invoice period: {daterange}').format(daterange=request_show_service_date)),
|
||||||
|
self.stylesheet['Normal']
|
||||||
|
))
|
||||||
|
|
||||||
if self.invoice.payment_provider_text:
|
if self.invoice.payment_provider_text:
|
||||||
story.append(FontFallbackParagraph(
|
story.append(FontFallbackParagraph(
|
||||||
self._normalize(self.invoice.payment_provider_text),
|
self._normalize(self.invoice.payment_provider_text),
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import re
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _, pgettext
|
||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
|
|
||||||
from pretix.base.invoicing.transmission import (
|
from pretix.base.invoicing.transmission import (
|
||||||
@@ -125,15 +125,15 @@ class PeppolIdValidator:
|
|||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
if ":" not in value:
|
if ":" not in value:
|
||||||
raise ValidationError(_("A PEPPOL participant ID always starts with a prefix, followed by a colon (:)."))
|
raise ValidationError(_("A Peppol participant ID always starts with a prefix, followed by a colon (:)."))
|
||||||
|
|
||||||
prefix, second = value.split(":", 1)
|
prefix, second = value.split(":", 1)
|
||||||
if prefix not in self.regex_rules:
|
if prefix not in self.regex_rules:
|
||||||
raise ValidationError(_("The PEPPOL participant ID prefix %(number)s is not known to our system. Please "
|
raise ValidationError(_("The Peppol participant ID prefix %(number)s is not known to our system. Please "
|
||||||
"reach out to us if you are sure this ID is correct."), params={"number": prefix})
|
"reach out to us if you are sure this ID is correct."), params={"number": prefix})
|
||||||
|
|
||||||
if not re.match(self.regex_rules[prefix], second):
|
if not re.match(self.regex_rules[prefix], second):
|
||||||
raise ValidationError(_("The PEPPOL participant ID does not match the validation rules for the prefix "
|
raise ValidationError(_("The Peppol participant ID does not match the validation rules for the prefix "
|
||||||
"%(number)s. Please reach out to us if you are sure this ID is correct."),
|
"%(number)s. Please reach out to us if you are sure this ID is correct."),
|
||||||
params={"number": prefix})
|
params={"number": prefix})
|
||||||
return value
|
return value
|
||||||
@@ -142,7 +142,7 @@ class PeppolIdValidator:
|
|||||||
@transmission_types.new()
|
@transmission_types.new()
|
||||||
class PeppolTransmissionType(TransmissionType):
|
class PeppolTransmissionType(TransmissionType):
|
||||||
identifier = "peppol"
|
identifier = "peppol"
|
||||||
verbose_name = "PEPPOL"
|
verbose_name = "Peppol"
|
||||||
priority = 250
|
priority = 250
|
||||||
enforce_transmission = True
|
enforce_transmission = True
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ class PeppolTransmissionType(TransmissionType):
|
|||||||
def invoice_address_form_fields(self) -> dict:
|
def invoice_address_form_fields(self) -> dict:
|
||||||
return {
|
return {
|
||||||
"transmission_peppol_participant_id": forms.CharField(
|
"transmission_peppol_participant_id": forms.CharField(
|
||||||
label=_("PEPPOL participant ID"),
|
label=_("Peppol participant ID"),
|
||||||
validators=[
|
validators=[
|
||||||
PeppolIdValidator(),
|
PeppolIdValidator(),
|
||||||
]
|
]
|
||||||
@@ -165,3 +165,13 @@ class PeppolTransmissionType(TransmissionType):
|
|||||||
"company", "street", "zipcode", "city", "country",
|
"company", "street", "zipcode", "city", "country",
|
||||||
}
|
}
|
||||||
return base | {"transmission_peppol_participant_id"}
|
return base | {"transmission_peppol_participant_id"}
|
||||||
|
|
||||||
|
def pdf_watermark(self) -> str:
|
||||||
|
return pgettext("peppol_invoice", "Visual copy")
|
||||||
|
|
||||||
|
def pdf_info_text(self) -> str:
|
||||||
|
return pgettext(
|
||||||
|
"peppol_invoice",
|
||||||
|
"This PDF document is a visual copy of the invoice and does not constitute an invoice for VAT "
|
||||||
|
"purposes. The original invoice is issued in XML format and transmitted through the Peppol network."
|
||||||
|
)
|
||||||
|
|||||||
@@ -104,6 +104,18 @@ class TransmissionType:
|
|||||||
def transmission_info_to_form_data(self, transmission_info: dict) -> dict:
|
def transmission_info_to_form_data(self, transmission_info: dict) -> dict:
|
||||||
return transmission_info
|
return transmission_info
|
||||||
|
|
||||||
|
def pdf_watermark(self) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Return a watermark that should be rendered across the PDF file.
|
||||||
|
"""
|
||||||
|
return None
|
||||||
|
|
||||||
|
def pdf_info_text(self) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Return an info text that should be rendered on the PDF file.
|
||||||
|
"""
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class TransmissionProvider:
|
class TransmissionProvider:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# Generated by Django 4.2.17 on 2025-09-08 08:14
|
||||||
|
from django.core.cache import cache
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
def set_invoice_period(apps, schema_editor):
|
||||||
|
EventSettingsStore = apps.get_model("pretixbase", "Event_SettingsStore")
|
||||||
|
ev_seen = set()
|
||||||
|
insert_queue = []
|
||||||
|
flush_queue = []
|
||||||
|
|
||||||
|
def store():
|
||||||
|
EventSettingsStore.objects.bulk_create(
|
||||||
|
insert_queue,
|
||||||
|
update_conflicts=True,
|
||||||
|
update_fields=["value"],
|
||||||
|
unique_fields=["object", "key"],
|
||||||
|
)
|
||||||
|
cache.delete_many(flush_queue)
|
||||||
|
flush_queue.clear()
|
||||||
|
insert_queue.clear()
|
||||||
|
|
||||||
|
# Existing events that use pretix-zugferd and have explicitly disabled delivery dates
|
||||||
|
for setting in EventSettingsStore.objects.filter(key="zugferd_include_delivery_date", value="False"):
|
||||||
|
flush_queue.append("hierarkey_{}_{}".format("event", setting.object_id))
|
||||||
|
insert_queue.append(
|
||||||
|
EventSettingsStore(
|
||||||
|
object_id=setting.object_id,
|
||||||
|
key="invoice_period",
|
||||||
|
value="invoice_date",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
ev_seen.add(setting.object_id)
|
||||||
|
|
||||||
|
if len(insert_queue) > 1000:
|
||||||
|
store()
|
||||||
|
|
||||||
|
# Existing events that previously hid their date on invoices
|
||||||
|
for setting in EventSettingsStore.objects.filter(key="show_dates_on_frontpage", value="False"):
|
||||||
|
if setting.object_id in ev_seen:
|
||||||
|
continue
|
||||||
|
|
||||||
|
flush_queue.append("hierarkey_{}_{}".format("event", setting.object_id))
|
||||||
|
insert_queue.append(
|
||||||
|
EventSettingsStore(
|
||||||
|
object_id=setting.object_id,
|
||||||
|
key="invoice_period",
|
||||||
|
value="auto_no_event",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(insert_queue) > 1000:
|
||||||
|
store()
|
||||||
|
|
||||||
|
store()
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("pretixbase", "0288_invoice_transmission"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name="invoiceline",
|
||||||
|
old_name="event_date_to",
|
||||||
|
new_name="period_end",
|
||||||
|
),
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name="invoiceline",
|
||||||
|
old_name="event_date_from",
|
||||||
|
new_name="period_start",
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
set_invoice_period,
|
||||||
|
migrations.RunPython.noop,
|
||||||
|
)
|
||||||
|
]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.17 on 2025-09-09 09:55
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("pretixbase", "0289_invoiceline_period"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="invoice",
|
||||||
|
name="plugin_data",
|
||||||
|
field=models.JSONField(default=dict),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -243,8 +243,16 @@ class EventMixin:
|
|||||||
def waiting_list_active(self):
|
def waiting_list_active(self):
|
||||||
if not self.settings.waiting_list_enabled:
|
if not self.settings.waiting_list_enabled:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if self.settings.waiting_list_auto_disable:
|
if self.settings.waiting_list_auto_disable:
|
||||||
return self.settings.waiting_list_auto_disable.datetime(self) > time_machine_now()
|
if self.settings.waiting_list_auto_disable.datetime(self) <= time_machine_now():
|
||||||
|
return False
|
||||||
|
|
||||||
|
if hasattr(self, 'active_quotas'):
|
||||||
|
# Only run when called with computed quotas, i.e. event calendar
|
||||||
|
if not self.best_availability[3]:
|
||||||
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -322,9 +330,7 @@ class EventMixin:
|
|||||||
sq_active_item = Item.objects.using(settings.DATABASE_REPLICA).filter_available(channel=channel, voucher=voucher).filter(
|
sq_active_item = Item.objects.using(settings.DATABASE_REPLICA).filter_available(channel=channel, voucher=voucher).filter(
|
||||||
Q(variations__isnull=True)
|
Q(variations__isnull=True)
|
||||||
& Q(quotas__pk=OuterRef('pk'))
|
& Q(quotas__pk=OuterRef('pk'))
|
||||||
).order_by().values_list('quotas__pk').annotate(
|
)
|
||||||
items=GroupConcat('pk', delimiter=',')
|
|
||||||
).values('items')
|
|
||||||
|
|
||||||
q_variation = (
|
q_variation = (
|
||||||
Q(active=True)
|
Q(active=True)
|
||||||
@@ -357,9 +363,7 @@ class EventMixin:
|
|||||||
q_variation &= Q(hide_without_voucher=False)
|
q_variation &= Q(hide_without_voucher=False)
|
||||||
q_variation &= Q(item__hide_without_voucher=False)
|
q_variation &= Q(item__hide_without_voucher=False)
|
||||||
|
|
||||||
sq_active_variation = ItemVariation.objects.filter(q_variation).order_by().values_list('quotas__pk').annotate(
|
sq_active_variation = ItemVariation.objects.filter(q_variation)
|
||||||
items=GroupConcat('pk', delimiter=',')
|
|
||||||
).values('items')
|
|
||||||
quota_base_qs = Quota.objects.using(settings.DATABASE_REPLICA).filter(
|
quota_base_qs = Quota.objects.using(settings.DATABASE_REPLICA).filter(
|
||||||
ignore_for_event_availability=False
|
ignore_for_event_availability=False
|
||||||
)
|
)
|
||||||
@@ -376,8 +380,23 @@ class EventMixin:
|
|||||||
'quotas',
|
'quotas',
|
||||||
to_attr='active_quotas',
|
to_attr='active_quotas',
|
||||||
queryset=quota_base_qs.annotate(
|
queryset=quota_base_qs.annotate(
|
||||||
active_items=Subquery(sq_active_item, output_field=models.TextField()),
|
active_items=Subquery(
|
||||||
active_variations=Subquery(sq_active_variation, output_field=models.TextField()),
|
sq_active_item.order_by().values_list('quotas__pk').annotate(
|
||||||
|
items=GroupConcat('pk', delimiter=',')
|
||||||
|
).values('items'),
|
||||||
|
output_field=models.TextField()
|
||||||
|
),
|
||||||
|
active_variations=Subquery(
|
||||||
|
sq_active_variation.order_by().values_list('quotas__pk').annotate(
|
||||||
|
items=GroupConcat('pk', delimiter=',')
|
||||||
|
).values('items'),
|
||||||
|
output_field=models.TextField()),
|
||||||
|
has_active_items_with_waitinglist=Exists(
|
||||||
|
sq_active_item.filter(allow_waitinglist=True),
|
||||||
|
),
|
||||||
|
has_active_variations_with_waitinglist=Exists(
|
||||||
|
sq_active_variation.filter(item__allow_waitinglist=True),
|
||||||
|
),
|
||||||
).exclude(
|
).exclude(
|
||||||
Q(active_items="") & Q(active_variations="")
|
Q(active_items="") & Q(active_variations="")
|
||||||
).select_related('event', 'subevent')
|
).select_related('event', 'subevent')
|
||||||
@@ -406,11 +425,12 @@ class EventMixin:
|
|||||||
@cached_property
|
@cached_property
|
||||||
def best_availability(self):
|
def best_availability(self):
|
||||||
"""
|
"""
|
||||||
Returns a 3-tuple of
|
Returns a 4-tuple of
|
||||||
|
|
||||||
- The availability state of this event (one of the ``Quota.AVAILABILITY_*`` constants)
|
- The availability state of this event (one of the ``Quota.AVAILABILITY_*`` constants)
|
||||||
- The number of tickets currently available (or ``None``)
|
- The number of tickets currently available (or ``None``)
|
||||||
- The number of tickets "originally" available (or ``None``)
|
- The number of tickets "originally" available (or ``None``)
|
||||||
|
- Whether a sold out product has the waiting list enabled
|
||||||
|
|
||||||
This can only be called on objects obtained through a queryset that has been passed through ``.annotated()``.
|
This can only be called on objects obtained through a queryset that has been passed through ``.annotated()``.
|
||||||
"""
|
"""
|
||||||
@@ -433,6 +453,7 @@ class EventMixin:
|
|||||||
r = getattr(self, '_quota_cache', {})
|
r = getattr(self, '_quota_cache', {})
|
||||||
quotas_for_item = defaultdict(list)
|
quotas_for_item = defaultdict(list)
|
||||||
quotas_for_variation = defaultdict(list)
|
quotas_for_variation = defaultdict(list)
|
||||||
|
waiting_list_found = False
|
||||||
for q in self.active_quotas:
|
for q in self.active_quotas:
|
||||||
if q not in r:
|
if q not in r:
|
||||||
r[q] = q.availability(allow_cache=True)
|
r[q] = q.availability(allow_cache=True)
|
||||||
@@ -441,6 +462,8 @@ class EventMixin:
|
|||||||
for item_id in q.active_items.split(","):
|
for item_id in q.active_items.split(","):
|
||||||
if item_id not in items_disabled:
|
if item_id not in items_disabled:
|
||||||
quotas_for_item[item_id].append(q)
|
quotas_for_item[item_id].append(q)
|
||||||
|
if q.has_active_items_with_waitinglist or q.has_active_variations_with_waitinglist:
|
||||||
|
waiting_list_found = True
|
||||||
if q.active_variations:
|
if q.active_variations:
|
||||||
for var_id in q.active_variations.split(","):
|
for var_id in q.active_variations.split(","):
|
||||||
if var_id not in vars_disabled:
|
if var_id not in vars_disabled:
|
||||||
@@ -448,7 +471,7 @@ class EventMixin:
|
|||||||
|
|
||||||
if not self.active_quotas or (not quotas_for_item and not quotas_for_variation):
|
if not self.active_quotas or (not quotas_for_item and not quotas_for_variation):
|
||||||
# No item is enabled for this event, treat the event as "unknown"
|
# No item is enabled for this event, treat the event as "unknown"
|
||||||
return None, None, None
|
return None, None, None, waiting_list_found
|
||||||
|
|
||||||
# We iterate over all items and variations and keep track of
|
# We iterate over all items and variations and keep track of
|
||||||
# - `best_state_found` - the best availability state we have seen so far. If one item is available, the event is available!
|
# - `best_state_found` - the best availability state we have seen so far. If one item is available, the event is available!
|
||||||
@@ -467,7 +490,7 @@ class EventMixin:
|
|||||||
quotas_that_are_not_unlimited = [q for q in quota_list if q.size is not None]
|
quotas_that_are_not_unlimited = [q for q in quota_list if q.size is not None]
|
||||||
if not quotas_that_are_not_unlimited:
|
if not quotas_that_are_not_unlimited:
|
||||||
# We found an unlimited ticket, no more need to do anything else
|
# We found an unlimited ticket, no more need to do anything else
|
||||||
return Quota.AVAILABILITY_OK, None, None
|
return Quota.AVAILABILITY_OK, None, None, waiting_list_found
|
||||||
|
|
||||||
if worst_state_for_ticket == Quota.AVAILABILITY_OK:
|
if worst_state_for_ticket == Quota.AVAILABILITY_OK:
|
||||||
availability_of_this = min(max(0, r[q][1] - quota_used_for_found_tickets[q]) for q in quotas_that_are_not_unlimited)
|
availability_of_this = min(max(0, r[q][1] - quota_used_for_found_tickets[q]) for q in quotas_that_are_not_unlimited)
|
||||||
@@ -481,7 +504,8 @@ class EventMixin:
|
|||||||
quota_used_for_possible_tickets[q] += possible_of_this
|
quota_used_for_possible_tickets[q] += possible_of_this
|
||||||
|
|
||||||
best_state_found = max(best_state_found, worst_state_for_ticket)
|
best_state_found = max(best_state_found, worst_state_for_ticket)
|
||||||
return best_state_found, num_tickets_found, num_tickets_possible
|
|
||||||
|
return best_state_found, num_tickets_found, num_tickets_possible, waiting_list_found
|
||||||
|
|
||||||
def free_seats(self, ignore_voucher=None, sales_channel='web', include_blocked=False):
|
def free_seats(self, ignore_voucher=None, sales_channel='web', include_blocked=False):
|
||||||
assert isinstance(sales_channel, str) or sales_channel is None
|
assert isinstance(sales_channel, str) or sales_channel is None
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
# License for the specific language governing permissions and limitations under the License.
|
# License for the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
import string
|
import string
|
||||||
|
import warnings
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import pycountry
|
import pycountry
|
||||||
@@ -42,6 +43,7 @@ from django.db.models.functions import Cast
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _, pgettext
|
from django.utils.translation import gettext_lazy as _, pgettext
|
||||||
from django_scopes import ScopedManager
|
from django_scopes import ScopedManager
|
||||||
|
|
||||||
@@ -200,6 +202,7 @@ class Invoice(models.Model):
|
|||||||
transmission_info = models.JSONField(null=True, blank=True)
|
transmission_info = models.JSONField(null=True, blank=True)
|
||||||
|
|
||||||
file = models.FileField(null=True, blank=True, upload_to=invoice_filename, max_length=255)
|
file = models.FileField(null=True, blank=True, upload_to=invoice_filename, max_length=255)
|
||||||
|
plugin_data = models.JSONField(default=dict)
|
||||||
|
|
||||||
objects = ScopedManager(organizer='event__organizer')
|
objects = ScopedManager(organizer='event__organizer')
|
||||||
|
|
||||||
@@ -368,6 +371,22 @@ class Invoice(models.Model):
|
|||||||
from pretix.base.invoicing.transmission import transmission_types
|
from pretix.base.invoicing.transmission import transmission_types
|
||||||
return transmission_types.get(identifier=self.transmission_type)[0]
|
return transmission_types.get(identifier=self.transmission_type)[0]
|
||||||
|
|
||||||
|
def set_transmission_failed(self, provider, data):
|
||||||
|
self.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
|
||||||
|
self.transmission_date = now()
|
||||||
|
if not self.transmission_provider and provider:
|
||||||
|
self.transmission_provider = provider
|
||||||
|
self.save(update_fields=["transmission_status", "transmission_date", "transmission_provider"])
|
||||||
|
self.order.log_action(
|
||||||
|
"pretix.event.order.invoice.sending_failed",
|
||||||
|
data={
|
||||||
|
"full_invoice_no": self.full_invoice_no,
|
||||||
|
"transmission_provider": provider,
|
||||||
|
"transmission_type": self.transmission_type,
|
||||||
|
"data": data,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class InvoiceLine(models.Model):
|
class InvoiceLine(models.Model):
|
||||||
"""
|
"""
|
||||||
@@ -387,10 +406,10 @@ class InvoiceLine(models.Model):
|
|||||||
:type tax_name: str
|
:type tax_name: str
|
||||||
:param subevent: The subevent this line refers to
|
:param subevent: The subevent this line refers to
|
||||||
:type subevent: SubEvent
|
:type subevent: SubEvent
|
||||||
:param event_date_from: Event date of the (sub)event at the time the invoice was created
|
:param period_start: Start if service period invoiced
|
||||||
:type event_date_from: datetime
|
:type period_start: datetime
|
||||||
:param event_date_to: Event end date of the (sub)event at the time the invoice was created
|
:param period_end: End of service period invoiced
|
||||||
:type event_date_to: datetime
|
:type period_end: datetime
|
||||||
:param event_location: Event location of the (sub)event at the time the invoice was created
|
:param event_location: Event location of the (sub)event at the time the invoice was created
|
||||||
:type event_location: str
|
:type event_location: str
|
||||||
:param item: The item this line refers to
|
:param item: The item this line refers to
|
||||||
@@ -409,8 +428,8 @@ class InvoiceLine(models.Model):
|
|||||||
tax_name = models.CharField(max_length=190)
|
tax_name = models.CharField(max_length=190)
|
||||||
tax_code = models.CharField(max_length=190, null=True, blank=True)
|
tax_code = models.CharField(max_length=190, null=True, blank=True)
|
||||||
subevent = models.ForeignKey('SubEvent', null=True, blank=True, on_delete=models.PROTECT)
|
subevent = models.ForeignKey('SubEvent', null=True, blank=True, on_delete=models.PROTECT)
|
||||||
event_date_from = models.DateTimeField(null=True)
|
period_start = models.DateTimeField(null=True)
|
||||||
event_date_to = models.DateTimeField(null=True)
|
period_end = models.DateTimeField(null=True)
|
||||||
event_location = models.TextField(null=True, blank=True)
|
event_location = models.TextField(null=True, blank=True)
|
||||||
item = models.ForeignKey('Item', null=True, blank=True, on_delete=models.PROTECT)
|
item = models.ForeignKey('Item', null=True, blank=True, on_delete=models.PROTECT)
|
||||||
variation = models.ForeignKey('ItemVariation', null=True, blank=True, on_delete=models.PROTECT)
|
variation = models.ForeignKey('ItemVariation', null=True, blank=True, on_delete=models.PROTECT)
|
||||||
@@ -427,3 +446,35 @@ class InvoiceLine(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return 'Line {} of invoice {}'.format(self.position, self.invoice)
|
return 'Line {} of invoice {}'.format(self.position, self.invoice)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def event_date_from(self):
|
||||||
|
warnings.warn(
|
||||||
|
'InvoiceLine.event_date_from is deprecated, use period_start instead,',
|
||||||
|
category=DeprecationWarning,
|
||||||
|
)
|
||||||
|
return self.period_start
|
||||||
|
|
||||||
|
@event_date_from.setter
|
||||||
|
def event_date_from(self, value):
|
||||||
|
warnings.warn(
|
||||||
|
'InvoiceLine.event_date_from is deprecated, use period_start instead,',
|
||||||
|
category=DeprecationWarning,
|
||||||
|
)
|
||||||
|
self.period_start = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def event_date_to(self):
|
||||||
|
warnings.warn(
|
||||||
|
'InvoiceLine.event_date_to is deprecated, use period_end instead,',
|
||||||
|
category=DeprecationWarning,
|
||||||
|
)
|
||||||
|
return self.period_end
|
||||||
|
|
||||||
|
@event_date_to.setter
|
||||||
|
def event_date_to(self, value):
|
||||||
|
warnings.warn(
|
||||||
|
'InvoiceLine.event_date_to is deprecated, use period_end instead,',
|
||||||
|
category=DeprecationWarning,
|
||||||
|
)
|
||||||
|
self.period_to = value
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class Organizer(LoggedModel):
|
|||||||
self.settings.cookie_consent = True
|
self.settings.cookie_consent = True
|
||||||
|
|
||||||
plugins = [p for p in settings.PRETIX_PLUGINS_ORGANIZER_DEFAULT.split(",") if p]
|
plugins = [p for p in settings.PRETIX_PLUGINS_ORGANIZER_DEFAULT.split(",") if p]
|
||||||
if plugins:
|
if plugins and not self.get_plugins():
|
||||||
self.set_active_plugins(plugins, allow_restricted=plugins)
|
self.set_active_plugins(plugins, allow_restricted=plugins)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
|||||||
+28
-5
@@ -48,6 +48,8 @@ from functools import partial
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
import jsonschema
|
import jsonschema
|
||||||
|
import pypdf
|
||||||
|
import pypdf.generic
|
||||||
import reportlab.rl_config
|
import reportlab.rl_config
|
||||||
from bidi import get_display
|
from bidi import get_display
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -817,7 +819,7 @@ class Renderer:
|
|||||||
# and does not deal with our default value here properly
|
# and does not deal with our default value here properly
|
||||||
content = op.secret
|
content = op.secret
|
||||||
else:
|
else:
|
||||||
content = self._get_text_content(op, order, o)
|
content = self._get_text_content(op, order, o).strip()
|
||||||
|
|
||||||
if len(content) == 0:
|
if len(content) == 0:
|
||||||
return
|
return
|
||||||
@@ -1187,8 +1189,7 @@ class Renderer:
|
|||||||
|
|
||||||
for i, page in enumerate(fg_pdf.pages):
|
for i, page in enumerate(fg_pdf.pages):
|
||||||
bg_page = self.bg_pdf.pages[i]
|
bg_page = self.bg_pdf.pages[i]
|
||||||
if bg_page.rotation != 0:
|
_correct_page_media_box(bg_page)
|
||||||
bg_page.transfer_rotation_to_content()
|
|
||||||
page.merge_page(bg_page, over=False)
|
page.merge_page(bg_page, over=False)
|
||||||
output.add_page(page)
|
output.add_page(page)
|
||||||
|
|
||||||
@@ -1257,8 +1258,7 @@ def merge_background(fg_pdf: PdfWriter, bg_pdf: PdfWriter, out_file, compress):
|
|||||||
else:
|
else:
|
||||||
for i, page in enumerate(fg_pdf.pages):
|
for i, page in enumerate(fg_pdf.pages):
|
||||||
bg_page = bg_pdf.pages[i]
|
bg_page = bg_pdf.pages[i]
|
||||||
if bg_page.rotation != 0:
|
_correct_page_media_box(bg_page)
|
||||||
bg_page.transfer_rotation_to_content()
|
|
||||||
page.merge_page(bg_page, over=False)
|
page.merge_page(bg_page, over=False)
|
||||||
|
|
||||||
# pdf_header is a string like "%pdf-X.X"
|
# pdf_header is a string like "%pdf-X.X"
|
||||||
@@ -1268,6 +1268,29 @@ def merge_background(fg_pdf: PdfWriter, bg_pdf: PdfWriter, out_file, compress):
|
|||||||
fg_pdf.write(out_file)
|
fg_pdf.write(out_file)
|
||||||
|
|
||||||
|
|
||||||
|
def _correct_page_media_box(page: pypdf.PageObject):
|
||||||
|
if page.rotation != 0:
|
||||||
|
page.transfer_rotation_to_content()
|
||||||
|
media_box = page.mediabox
|
||||||
|
trsf = pypdf.Transformation()
|
||||||
|
if media_box.bottom != 0:
|
||||||
|
trsf = trsf.translate(0, -media_box.bottom)
|
||||||
|
if media_box.left != 0:
|
||||||
|
trsf = trsf.translate(-media_box.left, 0)
|
||||||
|
page.add_transformation(trsf, False)
|
||||||
|
for b in ["/MediaBox", "/CropBox", "/BleedBox", "/TrimBox", "/ArtBox"]:
|
||||||
|
if b in page:
|
||||||
|
rr = pypdf.generic.RectangleObject(page[b])
|
||||||
|
pt1 = trsf.apply_on(rr.lower_left)
|
||||||
|
pt2 = trsf.apply_on(rr.upper_right)
|
||||||
|
page[pypdf.generic.NameObject(b)] = pypdf.generic.RectangleObject((
|
||||||
|
min(pt1[0], pt2[0]),
|
||||||
|
min(pt1[1], pt2[1]),
|
||||||
|
max(pt1[0], pt2[0]),
|
||||||
|
max(pt1[1], pt2[1]),
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
@deconstructible
|
@deconstructible
|
||||||
class PdfLayoutValidator:
|
class PdfLayoutValidator:
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ from pretix.base.signals import (
|
|||||||
periodic_task, register_data_exporters, register_multievent_data_exporters,
|
periodic_task, register_data_exporters, register_multievent_data_exporters,
|
||||||
)
|
)
|
||||||
from pretix.celery_app import app
|
from pretix.celery_app import app
|
||||||
from pretix.helpers import OF_SELF
|
from pretix.helpers import OF_SELF, repeatable_reads_transaction
|
||||||
from pretix.helpers.urls import build_absolute_uri
|
from pretix.helpers.urls import build_absolute_uri
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -80,7 +80,12 @@ def export(self, event: Event, fileid: str, provider: str, form_data: Dict[str,
|
|||||||
continue
|
continue
|
||||||
ex = response(event, event.organizer, set_progress)
|
ex = response(event, event.organizer, set_progress)
|
||||||
if ex.identifier == provider:
|
if ex.identifier == provider:
|
||||||
d = ex.render(form_data)
|
if ex.repeatable_read:
|
||||||
|
with repeatable_reads_transaction():
|
||||||
|
d = ex.render(form_data)
|
||||||
|
else:
|
||||||
|
d = ex.render(form_data)
|
||||||
|
|
||||||
if d is None:
|
if d is None:
|
||||||
raise ExportError(
|
raise ExportError(
|
||||||
gettext('Your export did not contain any data.')
|
gettext('Your export did not contain any data.')
|
||||||
@@ -151,7 +156,11 @@ def multiexport(self, organizer: Organizer, user: User, device: int, token: int,
|
|||||||
gettext('You do not have sufficient permission to perform this export.')
|
gettext('You do not have sufficient permission to perform this export.')
|
||||||
)
|
)
|
||||||
|
|
||||||
d = ex.render(form_data)
|
if ex.repeatable_read:
|
||||||
|
with repeatable_reads_transaction():
|
||||||
|
d = ex.render(form_data)
|
||||||
|
else:
|
||||||
|
d = ex.render(form_data)
|
||||||
if d is None:
|
if d is None:
|
||||||
raise ExportError(
|
raise ExportError(
|
||||||
gettext('Your export did not contain any data.')
|
gettext('Your export did not contain any data.')
|
||||||
@@ -209,7 +218,11 @@ def _run_scheduled_export(schedule, context: Union[Event, Organizer], exporter,
|
|||||||
try:
|
try:
|
||||||
if not exporter:
|
if not exporter:
|
||||||
raise ExportError("Export type not found.")
|
raise ExportError("Export type not found.")
|
||||||
d = exporter.render(schedule.export_form_data)
|
if exporter.repeatable_read:
|
||||||
|
with repeatable_reads_transaction():
|
||||||
|
d = exporter.render(schedule.export_form_data)
|
||||||
|
else:
|
||||||
|
d = exporter.render(schedule.export_form_data)
|
||||||
if d is None:
|
if d is None:
|
||||||
raise ExportEmptyError(
|
raise ExportEmptyError(
|
||||||
gettext('Your export did not contain any data.')
|
gettext('Your export did not contain any data.')
|
||||||
|
|||||||
@@ -61,7 +61,9 @@ from pretix.base.models.tax import EU_CURRENCIES
|
|||||||
from pretix.base.services.tasks import (
|
from pretix.base.services.tasks import (
|
||||||
TransactionAwareProfiledEventTask, TransactionAwareTask,
|
TransactionAwareProfiledEventTask, TransactionAwareTask,
|
||||||
)
|
)
|
||||||
from pretix.base.signals import invoice_line_text, periodic_task
|
from pretix.base.signals import (
|
||||||
|
build_invoice_data, invoice_line_text, periodic_task,
|
||||||
|
)
|
||||||
from pretix.celery_app import app
|
from pretix.celery_app import app
|
||||||
from pretix.helpers.database import OF_SELF, rolledback_transaction
|
from pretix.helpers.database import OF_SELF, rolledback_transaction
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
@@ -82,6 +84,10 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
|
|
||||||
lp = invoice.order.payments.last()
|
lp = invoice.order.payments.last()
|
||||||
|
|
||||||
|
min_period_start = None
|
||||||
|
max_period_end = None
|
||||||
|
now_dt = now()
|
||||||
|
|
||||||
with (language(invoice.locale, invoice.event.settings.region)):
|
with (language(invoice.locale, invoice.event.settings.region)):
|
||||||
invoice.invoice_from = invoice.event.settings.get('invoice_address_from')
|
invoice.invoice_from = invoice.event.settings.get('invoice_address_from')
|
||||||
invoice.invoice_from_name = invoice.event.settings.get('invoice_address_from_name')
|
invoice.invoice_from_name = invoice.event.settings.get('invoice_address_from_name')
|
||||||
@@ -208,7 +214,9 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
positions = list(
|
positions = list(
|
||||||
invoice.order.positions.select_related('addon_to', 'item', 'tax_rule', 'subevent', 'variation').annotate(
|
invoice.order.positions.select_related('addon_to', 'item', 'tax_rule', 'subevent', 'variation').annotate(
|
||||||
addon_c=Count('addons')
|
addon_c=Count('addons')
|
||||||
).prefetch_related('answers', 'answers__options', 'answers__question').order_by('positionid', 'id')
|
).prefetch_related(
|
||||||
|
'answers', 'answers__options', 'answers__question', 'granted_memberships',
|
||||||
|
).order_by('positionid', 'id')
|
||||||
)
|
)
|
||||||
|
|
||||||
reverse_charge = False
|
reverse_charge = False
|
||||||
@@ -267,6 +275,10 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
location=_location_oneliner(location)
|
location=_location_oneliner(location)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
period_start, period_end = _service_period_for_position(invoice, p, now_dt)
|
||||||
|
min_period_start = min(min_period_start or period_start, period_start)
|
||||||
|
max_period_end = min(max_period_end or period_end, period_end)
|
||||||
|
|
||||||
InvoiceLine.objects.create(
|
InvoiceLine.objects.create(
|
||||||
position=i,
|
position=i,
|
||||||
invoice=invoice,
|
invoice=invoice,
|
||||||
@@ -277,8 +289,8 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
item=p.item,
|
item=p.item,
|
||||||
variation=p.variation,
|
variation=p.variation,
|
||||||
attendee_name=p.attendee_name if invoice.event.settings.invoice_attendee_name else None,
|
attendee_name=p.attendee_name if invoice.event.settings.invoice_attendee_name else None,
|
||||||
event_date_from=p.subevent.date_from if invoice.event.has_subevents else invoice.event.date_from,
|
period_start=period_start,
|
||||||
event_date_to=p.subevent.date_to if invoice.event.has_subevents else invoice.event.date_to,
|
period_end=period_end,
|
||||||
event_location=location if invoice.event.settings.invoice_event_location else None,
|
event_location=location if invoice.event.settings.invoice_event_location else None,
|
||||||
tax_rate=p.tax_rate,
|
tax_rate=p.tax_rate,
|
||||||
tax_code=p.tax_code,
|
tax_code=p.tax_code,
|
||||||
@@ -301,13 +313,29 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
fee_title = _(fee.get_fee_type_display())
|
fee_title = _(fee.get_fee_type_display())
|
||||||
if fee.description:
|
if fee.description:
|
||||||
fee_title += " - " + fee.description
|
fee_title += " - " + fee.description
|
||||||
|
|
||||||
|
if min_period_start and max_period_end:
|
||||||
|
# Consider fees to have the same service period as the products sold
|
||||||
|
period_start = min_period_start
|
||||||
|
period_end = max_period_end
|
||||||
|
else:
|
||||||
|
# Usually can only happen if everything except a cancellation fee is removed
|
||||||
|
if invoice.event.settings.invoice_period in ("auto", "auto_no_event", "event_date") and not invoice.event.has_subevents:
|
||||||
|
# Non-series event, let's be backwards-compatible and tag everything with the event period
|
||||||
|
period_start = invoice.event.date_from
|
||||||
|
period_end = invoice.event.date_to
|
||||||
|
else:
|
||||||
|
# We could try to work from the canceled positions, but it doesn't really make sense. A cancellation
|
||||||
|
# fee is not "delivered" at the event date, it is rather effective right now.
|
||||||
|
period_start = period_end = now()
|
||||||
|
|
||||||
InvoiceLine.objects.create(
|
InvoiceLine.objects.create(
|
||||||
position=i + offset,
|
position=i + offset,
|
||||||
invoice=invoice,
|
invoice=invoice,
|
||||||
description=fee_title,
|
description=fee_title,
|
||||||
gross_value=fee.value,
|
gross_value=fee.value,
|
||||||
event_date_from=None if invoice.event.has_subevents else invoice.event.date_from,
|
period_start=period_start,
|
||||||
event_date_to=None if invoice.event.has_subevents else invoice.event.date_to,
|
period_end=period_end,
|
||||||
event_location=(
|
event_location=(
|
||||||
None if invoice.event.has_subevents
|
None if invoice.event.has_subevents
|
||||||
else (str(invoice.event.location)
|
else (str(invoice.event.location)
|
||||||
@@ -336,6 +364,7 @@ def build_invoice(invoice: Invoice) -> Invoice:
|
|||||||
invoice.reverse_charge = reverse_charge
|
invoice.reverse_charge = reverse_charge
|
||||||
invoice.save()
|
invoice.save()
|
||||||
|
|
||||||
|
build_invoice_data.send(sender=invoice.event, invoice=invoice)
|
||||||
return invoice
|
return invoice
|
||||||
|
|
||||||
|
|
||||||
@@ -351,6 +380,55 @@ def build_cancellation(invoice: Invoice):
|
|||||||
return invoice
|
return invoice
|
||||||
|
|
||||||
|
|
||||||
|
def _service_period_for_position(invoice, position, invoice_dt):
|
||||||
|
if invoice.event.settings.invoice_period in ("auto", "auto_no_event"):
|
||||||
|
if position.valid_from and position.valid_until:
|
||||||
|
period_start = position.valid_from
|
||||||
|
period_end = position.valid_until
|
||||||
|
elif position.valid_from:
|
||||||
|
period_start = position.valid_from
|
||||||
|
period_end = position.valid_from # weird, but we have nothing else to base this on
|
||||||
|
elif position.valid_until:
|
||||||
|
period_start = min(invoice.order.datetime, position.valid_until)
|
||||||
|
period_end = position.valid_until
|
||||||
|
elif memberships := list(position.granted_memberships.all()):
|
||||||
|
period_start = min(m.date_start for m in memberships)
|
||||||
|
period_end = max(m.date_end for m in memberships)
|
||||||
|
elif invoice.event.has_subevents:
|
||||||
|
if position.subevent:
|
||||||
|
period_start = position.subevent.date_from
|
||||||
|
period_end = position.subevent.date_to
|
||||||
|
else:
|
||||||
|
# Currently impossible case, but might not be in the future and never makes
|
||||||
|
# sense to use the event date here
|
||||||
|
period_start = invoice_dt
|
||||||
|
period_end = invoice_dt
|
||||||
|
elif invoice.event.settings.invoice_period == "auto_no_event":
|
||||||
|
period_start = invoice_dt
|
||||||
|
period_end = invoice_dt
|
||||||
|
else:
|
||||||
|
period_start = invoice.event.date_from
|
||||||
|
period_end = invoice.event.date_to
|
||||||
|
elif invoice.event.settings.invoice_period == "order_date":
|
||||||
|
period_start = invoice.order.datetime
|
||||||
|
period_end = invoice.order.datetime
|
||||||
|
elif invoice.event.settings.invoice_period == "event_date":
|
||||||
|
if position.subevent:
|
||||||
|
period_start = position.subevent.date_from
|
||||||
|
period_end = position.subevent.date_to
|
||||||
|
else:
|
||||||
|
period_start = invoice.event.date_from
|
||||||
|
period_end = invoice.event.date_to
|
||||||
|
elif invoice.event.settings.invoice_period == "invoice_date":
|
||||||
|
period_start = period_end = invoice_dt
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Invalid invoice period setting '{invoice.event.settings.invoice_period}'")
|
||||||
|
|
||||||
|
if not period_end:
|
||||||
|
period_end = period_start
|
||||||
|
return period_start, period_end
|
||||||
|
|
||||||
|
|
||||||
def generate_cancellation(invoice: Invoice, trigger_pdf=True):
|
def generate_cancellation(invoice: Invoice, trigger_pdf=True):
|
||||||
if invoice.canceled:
|
if invoice.canceled:
|
||||||
raise ValueError("Invoice should not be canceled twice.")
|
raise ValueError("Invoice should not be canceled twice.")
|
||||||
@@ -456,6 +534,12 @@ def build_preview_invoice_pdf(event):
|
|||||||
if not locale or locale == '__user__':
|
if not locale or locale == '__user__':
|
||||||
locale = event.settings.locale
|
locale = event.settings.locale
|
||||||
|
|
||||||
|
if event.settings.invoice_period in ("auto", "auto_no_event", "event_date"):
|
||||||
|
period_start = event.date_from
|
||||||
|
period_end = event.date_to or event.date_from
|
||||||
|
else:
|
||||||
|
period_start = period_end = timezone.now()
|
||||||
|
|
||||||
with rolledback_transaction(), language(locale, event.settings.region):
|
with rolledback_transaction(), language(locale, event.settings.region):
|
||||||
order = event.orders.create(
|
order = event.orders.create(
|
||||||
status=Order.STATUS_PENDING, datetime=timezone.now(),
|
status=Order.STATUS_PENDING, datetime=timezone.now(),
|
||||||
@@ -506,8 +590,8 @@ def build_preview_invoice_pdf(event):
|
|||||||
invoice=invoice, description=_("Sample product {}").format(i + 1),
|
invoice=invoice, description=_("Sample product {}").format(i + 1),
|
||||||
gross_value=tax.gross, tax_value=tax.tax,
|
gross_value=tax.gross, tax_value=tax.tax,
|
||||||
tax_rate=tax.rate, tax_name=tax.name, tax_code=tax.code,
|
tax_rate=tax.rate, tax_name=tax.name, tax_code=tax.code,
|
||||||
event_date_from=event.date_from,
|
period_start=period_start,
|
||||||
event_date_to=event.date_to,
|
period_end=period_end,
|
||||||
event_location=event.settings.invoice_event_location,
|
event_location=event.settings.invoice_event_location,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -515,8 +599,8 @@ def build_preview_invoice_pdf(event):
|
|||||||
InvoiceLine.objects.create(
|
InvoiceLine.objects.create(
|
||||||
invoice=invoice, description=_("Sample product A"),
|
invoice=invoice, description=_("Sample product A"),
|
||||||
gross_value=100, tax_value=0, tax_rate=0, tax_code=None,
|
gross_value=100, tax_value=0, tax_rate=0, tax_code=None,
|
||||||
event_date_from=event.date_from,
|
period_start=period_start,
|
||||||
event_date_to=event.date_to,
|
period_end=period_end,
|
||||||
event_location=event.settings.invoice_event_location,
|
event_location=event.settings.invoice_event_location,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -664,20 +748,7 @@ def transmit_invoice(sender, invoice_id, allow_retransmission=True, **kwargs):
|
|||||||
break
|
break
|
||||||
|
|
||||||
if not provider:
|
if not provider:
|
||||||
invoice.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
|
invoice.set_transmission_failed(provider=None, data={"reason": "no_provider"})
|
||||||
invoice.transmission_date = now()
|
|
||||||
invoice.save(update_fields=["transmission_status", "transmission_date"])
|
|
||||||
invoice.order.log_action(
|
|
||||||
"pretix.event.order.invoice.sending_failed",
|
|
||||||
data={
|
|
||||||
"full_invoice_no": invoice.full_invoice_no,
|
|
||||||
"transmission_provider": None,
|
|
||||||
"transmission_type": invoice.transmission_type,
|
|
||||||
"data": {
|
|
||||||
"reason": "no_provider",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if invoice.order.testmode and not provider.testmode_supported:
|
if invoice.order.testmode and not provider.testmode_supported:
|
||||||
@@ -698,18 +769,7 @@ def transmit_invoice(sender, invoice_id, allow_retransmission=True, **kwargs):
|
|||||||
provider.transmit(invoice)
|
provider.transmit(invoice)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Transmission of invoice {invoice.pk} failed with exception.")
|
logger.exception(f"Transmission of invoice {invoice.pk} failed with exception.")
|
||||||
invoice.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
|
invoice.set_transmission_failed(provider=provider.identifier, data={
|
||||||
invoice.transmission_date = now()
|
"reason": "exception",
|
||||||
invoice.save(update_fields=["transmission_status", "transmission_date"])
|
"exception": str(e),
|
||||||
invoice.order.log_action(
|
})
|
||||||
"pretix.event.order.invoice.sending_failed",
|
|
||||||
data={
|
|
||||||
"full_invoice_no": invoice.full_invoice_no,
|
|
||||||
"transmission_provider": None,
|
|
||||||
"transmission_type": invoice.transmission_type,
|
|
||||||
"data": {
|
|
||||||
"reason": "exception",
|
|
||||||
"exception": str(e),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -405,8 +405,12 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
attach_cid_images(html_message, cid_images, verify_ssl=True)
|
attach_cid_images(html_message, cid_images, verify_ssl=True)
|
||||||
email.attach_alternative(html_message, "multipart/related")
|
email.attach_alternative(html_message, "multipart/related")
|
||||||
|
|
||||||
|
log_target = None
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
user = User.objects.get(pk=user)
|
user = User.objects.get(pk=user)
|
||||||
|
error_log_action_type = 'pretix.user.email.error'
|
||||||
|
log_target = user
|
||||||
|
|
||||||
if event:
|
if event:
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
@@ -426,12 +430,15 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
with cm():
|
with cm():
|
||||||
if customer:
|
if customer:
|
||||||
customer = Customer.objects.get(pk=customer)
|
customer = Customer.objects.get(pk=customer)
|
||||||
log_target = user or customer
|
if not user:
|
||||||
|
error_log_action_type = 'pretix.customer.email.error'
|
||||||
|
log_target = customer
|
||||||
|
|
||||||
if event:
|
if event:
|
||||||
if order:
|
if order:
|
||||||
try:
|
try:
|
||||||
order = event.orders.get(pk=order)
|
order = event.orders.get(pk=order)
|
||||||
|
error_log_action_type = 'pretix.event.order.email.error'
|
||||||
log_target = order
|
log_target = order
|
||||||
except Order.DoesNotExist:
|
except Order.DoesNotExist:
|
||||||
order = None
|
order = None
|
||||||
@@ -488,7 +495,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
|
|
||||||
email = email_filter.send_chained(event, 'message', message=email, order=order, user=user)
|
email = email_filter.send_chained(event, 'message', message=email, order=order, user=user)
|
||||||
|
|
||||||
invoices_sent = []
|
invoices_to_mark_transmitted = []
|
||||||
if invoices:
|
if invoices:
|
||||||
invoices = Invoice.objects.filter(pk__in=invoices)
|
invoices = Invoice.objects.filter(pk__in=invoices)
|
||||||
for inv in invoices:
|
for inv in invoices:
|
||||||
@@ -509,7 +516,23 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
inv.file.file.read(),
|
inv.file.file.read(),
|
||||||
'application/pdf'
|
'application/pdf'
|
||||||
)
|
)
|
||||||
invoices_sent.append(inv)
|
|
||||||
|
if inv.transmission_type == "email":
|
||||||
|
# Mark invoice as sent when it was sent to the requested address *either* at the time of
|
||||||
|
# invoice creation *or* as of right now.
|
||||||
|
expected_recipients = [
|
||||||
|
(inv.invoice_to_transmission_info or {}).get("transmission_email_address")
|
||||||
|
or inv.order.email,
|
||||||
|
]
|
||||||
|
try:
|
||||||
|
expected_recipients.append(
|
||||||
|
(inv.order.invoice_address.transmission_info or {}).get("transmission_email_address")
|
||||||
|
or inv.order.email
|
||||||
|
)
|
||||||
|
except InvoiceAddress.DoesNotExist:
|
||||||
|
pass
|
||||||
|
if any(t in expected_recipients for t in to):
|
||||||
|
invoices_to_mark_transmitted.append(inv)
|
||||||
except:
|
except:
|
||||||
logger.exception('Could not attach invoice to email')
|
logger.exception('Could not attach invoice to email')
|
||||||
pass
|
pass
|
||||||
@@ -574,7 +597,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
except MaxRetriesExceededError:
|
except MaxRetriesExceededError:
|
||||||
if log_target:
|
if log_target:
|
||||||
log_target.log_action(
|
log_target.log_action(
|
||||||
'pretix.email.error',
|
error_log_action_type,
|
||||||
data={
|
data={
|
||||||
'subject': 'SMTP code {}, max retries exceeded'.format(e.smtp_code),
|
'subject': 'SMTP code {}, max retries exceeded'.format(e.smtp_code),
|
||||||
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
||||||
@@ -582,12 +605,17 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
'invoices': [],
|
'invoices': [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
for i in invoices_to_mark_transmitted:
|
||||||
|
i.set_transmission_failed(provider="email_pdf", data={
|
||||||
|
"reason": "exception",
|
||||||
|
"exception": "SMTP code {}, max retries exceeded".format(e.smtp_code),
|
||||||
|
})
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
logger.exception('Error sending email')
|
logger.exception('Error sending email')
|
||||||
if log_target:
|
if log_target:
|
||||||
log_target.log_action(
|
log_target.log_action(
|
||||||
'pretix.email.error',
|
error_log_action_type,
|
||||||
data={
|
data={
|
||||||
'subject': 'SMTP code {}'.format(e.smtp_code),
|
'subject': 'SMTP code {}'.format(e.smtp_code),
|
||||||
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
'message': e.smtp_error.decode() if isinstance(e.smtp_error, bytes) else str(e.smtp_error),
|
||||||
@@ -595,6 +623,11 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
'invoices': [],
|
'invoices': [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
for i in invoices_to_mark_transmitted:
|
||||||
|
i.set_transmission_failed(provider="email_pdf", data={
|
||||||
|
"reason": "exception",
|
||||||
|
"exception": "SMTP code {}".format(e.smtp_code),
|
||||||
|
})
|
||||||
|
|
||||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||||
except smtplib.SMTPRecipientsRefused as e:
|
except smtplib.SMTPRecipientsRefused as e:
|
||||||
@@ -618,7 +651,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
message.append(f'{e}: {val[0]} {val[1].decode()}')
|
message.append(f'{e}: {val[0]} {val[1].decode()}')
|
||||||
|
|
||||||
log_target.log_action(
|
log_target.log_action(
|
||||||
'pretix.email.error',
|
error_log_action_type,
|
||||||
data={
|
data={
|
||||||
'subject': 'SMTP error',
|
'subject': 'SMTP error',
|
||||||
'message': '\n'.join(message),
|
'message': '\n'.join(message),
|
||||||
@@ -626,6 +659,11 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
'invoices': [],
|
'invoices': [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
for i in invoices_to_mark_transmitted:
|
||||||
|
i.set_transmission_failed(provider="email_pdf", data={
|
||||||
|
"reason": "exception",
|
||||||
|
"exception": "SMTP error",
|
||||||
|
})
|
||||||
|
|
||||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -635,7 +673,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
except MaxRetriesExceededError:
|
except MaxRetriesExceededError:
|
||||||
if log_target:
|
if log_target:
|
||||||
log_target.log_action(
|
log_target.log_action(
|
||||||
'pretix.email.error',
|
error_log_action_type,
|
||||||
data={
|
data={
|
||||||
'subject': 'Internal error',
|
'subject': 'Internal error',
|
||||||
'message': f'Max retries exceeded after error "{str(e)}"',
|
'message': f'Max retries exceeded after error "{str(e)}"',
|
||||||
@@ -643,10 +681,15 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
'invoices': [],
|
'invoices': [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
for i in invoices_to_mark_transmitted:
|
||||||
|
i.set_transmission_failed(provider="email_pdf", data={
|
||||||
|
"reason": "exception",
|
||||||
|
"exception": "Internal error",
|
||||||
|
})
|
||||||
raise e
|
raise e
|
||||||
if log_target:
|
if log_target:
|
||||||
log_target.log_action(
|
log_target.log_action(
|
||||||
'pretix.email.error',
|
error_log_action_type,
|
||||||
data={
|
data={
|
||||||
'subject': 'Internal error',
|
'subject': 'Internal error',
|
||||||
'message': str(e),
|
'message': str(e),
|
||||||
@@ -654,59 +697,52 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
|
|||||||
'invoices': [],
|
'invoices': [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
for i in invoices_to_mark_transmitted:
|
||||||
|
i.set_transmission_failed(provider="email_pdf", data={
|
||||||
|
"reason": "exception",
|
||||||
|
"exception": "Internal error",
|
||||||
|
})
|
||||||
logger.exception('Error sending email')
|
logger.exception('Error sending email')
|
||||||
raise SendMailException('Failed to send an email to {}.'.format(to))
|
raise SendMailException('Failed to send an email to {}.'.format(to))
|
||||||
else:
|
else:
|
||||||
for i in invoices_sent:
|
for i in invoices_to_mark_transmitted:
|
||||||
if i.transmission_type == "email":
|
if i.transmission_status != Invoice.TRANSMISSION_STATUS_COMPLETED:
|
||||||
# Mark invoice as sent when it was sent to the requested address *either* at the time of invoice
|
i.transmission_date = now()
|
||||||
# creation *or* as of right now.
|
i.transmission_status = Invoice.TRANSMISSION_STATUS_COMPLETED
|
||||||
expected_recipients = [
|
i.transmission_provider = "email_pdf"
|
||||||
(i.invoice_to_transmission_info or {}).get("transmission_email_address") or i.order.email,
|
i.transmission_info = {
|
||||||
]
|
"sent": [
|
||||||
try:
|
|
||||||
expected_recipients.append((i.order.invoice_address.transmission_info or {}).get("transmission_email_address") or i.order.email)
|
|
||||||
except InvoiceAddress.DoesNotExist:
|
|
||||||
pass
|
|
||||||
if not any(t in expected_recipients for t in to):
|
|
||||||
continue
|
|
||||||
if i.transmission_status != Invoice.TRANSMISSION_STATUS_COMPLETED:
|
|
||||||
i.transmission_date = now()
|
|
||||||
i.transmission_status = Invoice.TRANSMISSION_STATUS_COMPLETED
|
|
||||||
i.transmission_provider = "email_pdf"
|
|
||||||
i.transmission_info = {
|
|
||||||
"sent": [
|
|
||||||
{
|
|
||||||
"recipients": to,
|
|
||||||
"datetime": now().isoformat(),
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
i.save(update_fields=[
|
|
||||||
"transmission_date", "transmission_provider", "transmission_status",
|
|
||||||
"transmission_info"
|
|
||||||
])
|
|
||||||
elif i.transmission_provider == "email_pdf":
|
|
||||||
i.transmission_info["sent"].append(
|
|
||||||
{
|
{
|
||||||
"recipients": to,
|
"recipients": to,
|
||||||
"datetime": now().isoformat(),
|
"datetime": now().isoformat(),
|
||||||
}
|
}
|
||||||
)
|
]
|
||||||
i.save(update_fields=[
|
}
|
||||||
"transmission_info"
|
i.save(update_fields=[
|
||||||
])
|
"transmission_date", "transmission_provider", "transmission_status",
|
||||||
i.order.log_action(
|
"transmission_info"
|
||||||
"pretix.event.order.invoice.sent",
|
])
|
||||||
data={
|
elif i.transmission_provider == "email_pdf":
|
||||||
"full_invoice_no": i.full_invoice_no,
|
i.transmission_info["sent"].append(
|
||||||
"transmission_provider": "email_pdf",
|
{
|
||||||
"transmission_type": "email",
|
"recipients": to,
|
||||||
"data": {
|
"datetime": now().isoformat(),
|
||||||
"recipients": [to],
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
i.save(update_fields=[
|
||||||
|
"transmission_info"
|
||||||
|
])
|
||||||
|
i.order.log_action(
|
||||||
|
"pretix.event.order.invoice.sent",
|
||||||
|
data={
|
||||||
|
"full_invoice_no": i.full_invoice_no,
|
||||||
|
"transmission_provider": "email_pdf",
|
||||||
|
"transmission_type": "email",
|
||||||
|
"data": {
|
||||||
|
"recipients": [to],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def mail_send(*args, **kwargs):
|
def mail_send(*args, **kwargs):
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from itertools import zip_longest
|
|||||||
|
|
||||||
import django_redis
|
import django_redis
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import connection, models
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When,
|
Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When,
|
||||||
prefetch_related_objects,
|
prefetch_related_objects,
|
||||||
@@ -64,7 +64,8 @@ class QuotaAvailability:
|
|||||||
* count_cart (dict mapping quotas to ints)
|
* count_cart (dict mapping quotas to ints)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, count_waitinglist=True, ignore_closed=False, full_results=False, early_out=True):
|
def __init__(self, count_waitinglist=True, ignore_closed=False, full_results=False, early_out=True,
|
||||||
|
allow_repeatable_read=False):
|
||||||
"""
|
"""
|
||||||
Initialize a new quota availability calculator
|
Initialize a new quota availability calculator
|
||||||
|
|
||||||
@@ -86,6 +87,8 @@ class QuotaAvailability:
|
|||||||
keep the database-level quota cache up to date so backend overviews render quickly. If you
|
keep the database-level quota cache up to date so backend overviews render quickly. If you
|
||||||
do not care about keeping the cache up to date, you can set this to ``False`` for further
|
do not care about keeping the cache up to date, you can set this to ``False`` for further
|
||||||
performance improvements.
|
performance improvements.
|
||||||
|
|
||||||
|
:param allow_repeatable_read: Allow to run this even in REPEATABLE READ mode, generally not advised.
|
||||||
"""
|
"""
|
||||||
self._queue = []
|
self._queue = []
|
||||||
self._count_waitinglist = count_waitinglist
|
self._count_waitinglist = count_waitinglist
|
||||||
@@ -95,6 +98,7 @@ class QuotaAvailability:
|
|||||||
self._var_to_quotas = defaultdict(set)
|
self._var_to_quotas = defaultdict(set)
|
||||||
self._early_out = early_out
|
self._early_out = early_out
|
||||||
self._quota_objects = {}
|
self._quota_objects = {}
|
||||||
|
self._allow_repeatable_read = allow_repeatable_read
|
||||||
self.results = {}
|
self.results = {}
|
||||||
self.count_paid_orders = defaultdict(int)
|
self.count_paid_orders = defaultdict(int)
|
||||||
self.count_pending_orders = defaultdict(int)
|
self.count_pending_orders = defaultdict(int)
|
||||||
@@ -119,6 +123,10 @@ class QuotaAvailability:
|
|||||||
Compute the queued quotas. If ``allow_cache`` is set, results may also be taken from a cache that might
|
Compute the queued quotas. If ``allow_cache`` is set, results may also be taken from a cache that might
|
||||||
be a few minutes outdated. In this case, you may not rely on the results in the ``count_*`` properties.
|
be a few minutes outdated. In this case, you may not rely on the results in the ``count_*`` properties.
|
||||||
"""
|
"""
|
||||||
|
if not self._allow_repeatable_read and getattr(connection, "tx_in_repeatable_read", False):
|
||||||
|
raise ValueError("You cannot compute quotas in REPEATABLE READ mode unless you explicitly opted in to "
|
||||||
|
"do so.")
|
||||||
|
|
||||||
now_dt = now_dt or now()
|
now_dt = now_dt or now()
|
||||||
quota_ids_set = {q.id for q in self._queue}
|
quota_ids_set = {q.id for q in self._queue}
|
||||||
if not quota_ids_set:
|
if not quota_ids_set:
|
||||||
|
|||||||
@@ -197,6 +197,7 @@ def order_overview(
|
|||||||
item.all_variations = list(item.variations.all())
|
item.all_variations = list(item.variations.all())
|
||||||
item.has_variations = (len(item.all_variations) > 0)
|
item.has_variations = (len(item.all_variations) > 0)
|
||||||
item.num = {}
|
item.num = {}
|
||||||
|
item.subevent = subevent
|
||||||
if item.has_variations:
|
if item.has_variations:
|
||||||
for var in item.all_variations:
|
for var in item.all_variations:
|
||||||
variid = var.id
|
variid = var.id
|
||||||
|
|||||||
@@ -69,9 +69,6 @@ def generate_order(order: int, provider: str):
|
|||||||
prov = response(order.event)
|
prov = response(order.event)
|
||||||
if prov.identifier == provider:
|
if prov.identifier == provider:
|
||||||
filename, ttype, data = prov.generate_order(order)
|
filename, ttype, data = prov.generate_order(order)
|
||||||
if ttype == 'text/uri-list':
|
|
||||||
continue
|
|
||||||
|
|
||||||
path, ext = os.path.splitext(filename)
|
path, ext = os.path.splitext(filename)
|
||||||
for ct in CachedCombinedTicket.objects.filter(order=order, provider=provider):
|
for ct in CachedCombinedTicket.objects.filter(order=order, provider=provider):
|
||||||
ct.delete()
|
ct.delete()
|
||||||
@@ -161,6 +158,10 @@ def get_tickets_for_order(order, base_position=None):
|
|||||||
if not retval:
|
if not retval:
|
||||||
continue
|
continue
|
||||||
ct = CachedCombinedTicket.objects.get(pk=retval)
|
ct = CachedCombinedTicket.objects.get(pk=retval)
|
||||||
|
|
||||||
|
if ct.type == 'text/uri-list':
|
||||||
|
continue
|
||||||
|
|
||||||
tickets.append((
|
tickets.append((
|
||||||
"{}-{}-{}{}".format(
|
"{}-{}-{}{}".format(
|
||||||
order.event.slug.upper(), order.code, ct.provider, ct.extension,
|
order.event.slug.upper(), order.code, ct.provider, ct.extension,
|
||||||
|
|||||||
@@ -1098,6 +1098,35 @@ DEFAULTS = {
|
|||||||
help_text=_("Invoices will never be automatically generated for free orders.")
|
help_text=_("Invoices will never be automatically generated for free orders.")
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
'invoice_period': {
|
||||||
|
'default': 'auto',
|
||||||
|
'type': str,
|
||||||
|
'form_class': forms.ChoiceField,
|
||||||
|
'serializer_class': serializers.ChoiceField,
|
||||||
|
'serializer_kwargs': dict(
|
||||||
|
choices=(
|
||||||
|
('auto', _('Automatic based on ticket-specific validity, membership validity, event series date, or event date')),
|
||||||
|
('auto_no_event', _('Automatic, but prefer invoice date over event date')),
|
||||||
|
('event_date', _('Event date')),
|
||||||
|
('order_date', _('Order date')),
|
||||||
|
('invoice_date', _('Invoice date')),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'form_kwargs': dict(
|
||||||
|
label=_("Date of service"),
|
||||||
|
widget=forms.RadioSelect,
|
||||||
|
choices=(
|
||||||
|
('auto', _('Automatic based on ticket-specific validity, membership validity, event series date, or event date')),
|
||||||
|
('auto_no_event', _('Automatic, but prefer invoice date over event date')),
|
||||||
|
('event_date', _('Event date')),
|
||||||
|
('order_date', _('Order date')),
|
||||||
|
('invoice_date', _('Invoice date')),
|
||||||
|
),
|
||||||
|
help_text=_("This controls what dates are shown on the invoice, but is especially important for "
|
||||||
|
"electronic invoicing."),
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
},
|
||||||
'invoice_reissue_after_modify': {
|
'invoice_reissue_after_modify': {
|
||||||
'default': 'False',
|
'default': 'False',
|
||||||
'type': bool,
|
'type': bool,
|
||||||
|
|||||||
@@ -99,24 +99,24 @@ def is_app_active(sender, app, allow_legacy_plugins=False):
|
|||||||
elif isinstance(sender, Organizer) and allow_legacy_plugins:
|
elif isinstance(sender, Organizer) and allow_legacy_plugins:
|
||||||
# Deprecated behaviour: Event plugins that are registered on organizer level are considered active for
|
# Deprecated behaviour: Event plugins that are registered on organizer level are considered active for
|
||||||
# all organizers in the context of signals that used to be global signals before the introduction of
|
# all organizers in the context of signals that used to be global signals before the introduction of
|
||||||
# organizer-level plugin. A deprecation warning is emitted at .connect() time.
|
# organizer plugins. A deprecation warning is emitted at .connect() time.
|
||||||
enabled = True
|
enabled = True
|
||||||
else:
|
else:
|
||||||
raise ImproperlyConfigured(f"Cannot check if event-level plugin is active on {type(sender)}")
|
raise ImproperlyConfigured(f"Cannot check if event plugin is active on {type(sender)}")
|
||||||
elif level == PLUGIN_LEVEL_ORGANIZER:
|
elif level == PLUGIN_LEVEL_ORGANIZER:
|
||||||
if isinstance(sender, Organizer):
|
if isinstance(sender, Organizer):
|
||||||
enabled = app.name in sender.get_plugins()
|
enabled = app.name in sender.get_plugins()
|
||||||
elif isinstance(sender, Event):
|
elif isinstance(sender, Event):
|
||||||
enabled = app.name in sender.organizer.get_plugins()
|
enabled = app.name in sender.organizer.get_plugins()
|
||||||
else:
|
else:
|
||||||
raise ImproperlyConfigured(f"Cannot check if organizer-level plugin is active on {type(sender)}")
|
raise ImproperlyConfigured(f"Cannot check if organizer plugin is active on {type(sender)}")
|
||||||
elif level == PLUGIN_LEVEL_EVENT_ORGANIZER_HYBRID:
|
elif level == PLUGIN_LEVEL_EVENT_ORGANIZER_HYBRID:
|
||||||
if isinstance(sender, Organizer):
|
if isinstance(sender, Organizer):
|
||||||
enabled = app.name in sender.get_plugins()
|
enabled = app.name in sender.get_plugins()
|
||||||
elif isinstance(sender, Event):
|
elif isinstance(sender, Event):
|
||||||
enabled = app.name in sender.get_plugins() and app.name in sender.organizer.get_plugins()
|
enabled = app.name in sender.get_plugins() and app.name in sender.organizer.get_plugins()
|
||||||
else:
|
else:
|
||||||
raise ImproperlyConfigured(f"Cannot check if hybrid event/organizer-level plugin is active on {type(sender)}")
|
raise ImproperlyConfigured(f"Cannot check if hybrid event/organizer plugin is active on {type(sender)}")
|
||||||
else:
|
else:
|
||||||
raise ImproperlyConfigured("Unknown plugin level")
|
raise ImproperlyConfigured("Unknown plugin level")
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
|
|||||||
class EventPluginSignal(PluginSignal[Event]):
|
class EventPluginSignal(PluginSignal[Event]):
|
||||||
"""
|
"""
|
||||||
This is an extension to Django's built-in signals which differs in a way that it sends
|
This is an extension to Django's built-in signals which differs in a way that it sends
|
||||||
out it's events only to receivers which belong to plugins that are enabled for the given
|
out its events only to receivers which belong to plugins that are enabled for the given
|
||||||
Event.
|
Event.
|
||||||
"""
|
"""
|
||||||
type = Event
|
type = Event
|
||||||
@@ -254,7 +254,7 @@ class EventPluginSignal(PluginSignal[Event]):
|
|||||||
class OrganizerPluginSignal(PluginSignal[Organizer]):
|
class OrganizerPluginSignal(PluginSignal[Organizer]):
|
||||||
"""
|
"""
|
||||||
This is an extension to Django's built-in signals which differs in a way that it sends
|
This is an extension to Django's built-in signals which differs in a way that it sends
|
||||||
out it's events only to receivers which belong to plugins that are enabled for the given
|
out its events only to receivers which belong to plugins that are enabled for the given
|
||||||
Organizer.
|
Organizer.
|
||||||
"""
|
"""
|
||||||
type = Organizer
|
type = Organizer
|
||||||
@@ -596,6 +596,18 @@ multiple events. Receivers should return a subclass of pretix.base.exporter.Base
|
|||||||
The ``sender`` keyword argument will contain an organizer.
|
The ``sender`` keyword argument will contain an organizer.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
build_invoice_data = EventPluginSignal()
|
||||||
|
"""
|
||||||
|
Arguments: ``invoice``
|
||||||
|
|
||||||
|
This signal is sent out every time an invoice is built, after the invoice model was created
|
||||||
|
and filled and before the PDF generation task is started. You can use this to make changes
|
||||||
|
to the invoice, but we recommend to mostly use it to add content to ``Invoice.plugin_data``.
|
||||||
|
You are responsible for saving any changes to the database.
|
||||||
|
|
||||||
|
As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
|
"""
|
||||||
|
|
||||||
validate_order = EventPluginSignal()
|
validate_order = EventPluginSignal()
|
||||||
"""
|
"""
|
||||||
Arguments: ``payments``, ``positions``, ``email``, ``locale``, ``invoice_address``,
|
Arguments: ``payments``, ``positions``, ``email``, ``locale``, ``invoice_address``,
|
||||||
@@ -898,7 +910,7 @@ This signals allows you to add fees to an order while it is being created. You a
|
|||||||
return a list of ``OrderFee`` objects that are not yet saved to the database
|
return a list of ``OrderFee`` objects that are not yet saved to the database
|
||||||
(because there is no order yet).
|
(because there is no order yet).
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event. A ``positions``
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event. A ``positions``
|
||||||
argument will contain the cart positions and ``invoice_address`` the invoice address (useful for
|
argument will contain the cart positions and ``invoice_address`` the invoice address (useful for
|
||||||
tax calculation). The argument ``meta_info`` contains the order's meta dictionary. The ``total``
|
tax calculation). The argument ``meta_info`` contains the order's meta dictionary. The ``total``
|
||||||
keyword argument will contain the total cart sum without any fees. You should not rely on this
|
keyword argument will contain the total cart sum without any fees. You should not rely on this
|
||||||
@@ -916,7 +928,7 @@ This signals allows you to return a human-readable description for a fee type ba
|
|||||||
and ``internal_type`` attributes of the ``OrderFee`` model that you get as keyword arguments. You are
|
and ``internal_type`` attributes of the ``OrderFee`` model that you get as keyword arguments. You are
|
||||||
expected to return a string or None, if you don't know about this fee.
|
expected to return a string or None, if you don't know about this fee.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
allow_ticket_download = EventPluginSignal()
|
allow_ticket_download = EventPluginSignal()
|
||||||
|
|||||||
@@ -857,6 +857,7 @@ class InvoiceSettingsForm(EventSettingsValidationMixin, SettingsForm):
|
|||||||
'invoice_show_payments',
|
'invoice_show_payments',
|
||||||
'invoice_reissue_after_modify',
|
'invoice_reissue_after_modify',
|
||||||
'invoice_generate',
|
'invoice_generate',
|
||||||
|
'invoice_period',
|
||||||
'invoice_attendee_name',
|
'invoice_attendee_name',
|
||||||
'invoice_event_location',
|
'invoice_event_location',
|
||||||
'invoice_include_expire_date',
|
'invoice_include_expire_date',
|
||||||
|
|||||||
@@ -107,11 +107,16 @@ def get_all_payment_providers():
|
|||||||
return Event
|
return Event
|
||||||
|
|
||||||
with rolledback_transaction():
|
with rolledback_transaction():
|
||||||
|
plugins = ",".join([app.name for app in apps.get_app_configs()])
|
||||||
|
organizer = Organizer.objects.create(
|
||||||
|
name="INTERNAL",
|
||||||
|
plugins=plugins,
|
||||||
|
)
|
||||||
event = Event.objects.create(
|
event = Event.objects.create(
|
||||||
plugins=",".join([app.name for app in apps.get_app_configs()]),
|
plugins=plugins,
|
||||||
name="INTERNAL",
|
name="INTERNAL",
|
||||||
date_from=now(),
|
date_from=now(),
|
||||||
organizer=Organizer.objects.create(name="INTERNAL")
|
organizer=organizer,
|
||||||
)
|
)
|
||||||
event = FakeEvent(event)
|
event = FakeEvent(event)
|
||||||
provs = register_payment_providers.send(
|
provs = register_payment_providers.send(
|
||||||
@@ -220,6 +225,7 @@ class OrderFilterForm(FilterForm):
|
|||||||
(_('Cancellations'), (
|
(_('Cancellations'), (
|
||||||
(Order.STATUS_CANCELED, _('Canceled (fully)')),
|
(Order.STATUS_CANCELED, _('Canceled (fully)')),
|
||||||
('cp', _('Canceled (fully or with paid fee)')),
|
('cp', _('Canceled (fully or with paid fee)')),
|
||||||
|
('cany', _('Canceled (at least one position)')),
|
||||||
('rc', _('Cancellation requested')),
|
('rc', _('Cancellation requested')),
|
||||||
('cni', _('Fully canceled but invoice not canceled')),
|
('cni', _('Fully canceled but invoice not canceled')),
|
||||||
)),
|
)),
|
||||||
@@ -396,6 +402,16 @@ class OrderFilterForm(FilterForm):
|
|||||||
).filter(
|
).filter(
|
||||||
Q(status=Order.STATUS_PAID, has_pc=False) | Q(status=Order.STATUS_CANCELED)
|
Q(status=Order.STATUS_PAID, has_pc=False) | Q(status=Order.STATUS_CANCELED)
|
||||||
)
|
)
|
||||||
|
elif s == 'cany':
|
||||||
|
s = OrderPosition.all.filter(
|
||||||
|
order=OuterRef('pk'),
|
||||||
|
canceled=True,
|
||||||
|
)
|
||||||
|
qs = qs.annotate(
|
||||||
|
has_pc_c=Exists(s)
|
||||||
|
).filter(
|
||||||
|
Q(has_pc_c=True) | Q(status=Order.STATUS_CANCELED)
|
||||||
|
)
|
||||||
|
|
||||||
if fdata.get('ordering'):
|
if fdata.get('ordering'):
|
||||||
qs = qs.order_by(*get_deterministic_ordering(Order, self.get_order_by()))
|
qs = qs.order_by(*get_deterministic_ordering(Order, self.get_order_by()))
|
||||||
@@ -474,16 +490,31 @@ class EventOrderFilterForm(OrderFilterForm):
|
|||||||
fdata = self.cleaned_data
|
fdata = self.cleaned_data
|
||||||
qs = super().filter_qs(qs)
|
qs = super().filter_qs(qs)
|
||||||
|
|
||||||
|
# This is a little magic, but there's no option that does not confuse people and let's hope this confuses less
|
||||||
|
# people.
|
||||||
|
only_match_noncanceled_products = fdata.get('status') in (
|
||||||
|
Order.STATUS_PAID,
|
||||||
|
Order.STATUS_PAID + 'v',
|
||||||
|
Order.STATUS_PENDING,
|
||||||
|
Order.STATUS_PENDING + Order.STATUS_PAID,
|
||||||
|
)
|
||||||
|
if only_match_noncanceled_products:
|
||||||
|
canceled_filter = Q(all_positions__canceled=False)
|
||||||
|
elif fdata.get('status') in ('cp', 'cany'):
|
||||||
|
canceled_filter = Q(all_positions__canceled=True) | Q(status=Order.STATUS_CANCELED)
|
||||||
|
else:
|
||||||
|
canceled_filter = Q()
|
||||||
|
|
||||||
item = fdata.get('item')
|
item = fdata.get('item')
|
||||||
if item:
|
if item:
|
||||||
if '-' in item:
|
if '-' in item:
|
||||||
var = item.split('-')[1]
|
var = item.split('-')[1]
|
||||||
qs = qs.filter(all_positions__variation_id=var, all_positions__canceled=False).distinct()
|
qs = qs.filter(canceled_filter, all_positions__variation_id=var).distinct()
|
||||||
else:
|
else:
|
||||||
qs = qs.filter(all_positions__item_id=fdata.get('item'), all_positions__canceled=False).distinct()
|
qs = qs.filter(canceled_filter, all_positions__item_id=fdata.get('item')).distinct()
|
||||||
|
|
||||||
if fdata.get('subevent'):
|
if fdata.get('subevent'):
|
||||||
qs = qs.filter(all_positions__subevent=fdata.get('subevent'), all_positions__canceled=False).distinct()
|
qs = qs.filter(canceled_filter, all_positions__subevent=fdata.get('subevent')).distinct()
|
||||||
|
|
||||||
if fdata.get('question') and fdata.get('answer') is not None:
|
if fdata.get('question') and fdata.get('answer') is not None:
|
||||||
q = fdata.get('question')
|
q = fdata.get('question')
|
||||||
|
|||||||
@@ -67,7 +67,8 @@ class RRuleForm(forms.Form):
|
|||||||
)
|
)
|
||||||
count = forms.IntegerField(
|
count = forms.IntegerField(
|
||||||
label=_('Number of repetitions'),
|
label=_('Number of repetitions'),
|
||||||
initial=10
|
initial=10,
|
||||||
|
min_value=1,
|
||||||
)
|
)
|
||||||
until = forms.DateField(
|
until = forms.DateField(
|
||||||
widget=forms.DateInput(
|
widget=forms.DateInput(
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ class VoucherForm(I18nModelForm):
|
|||||||
try:
|
try:
|
||||||
Voucher.clean_max_usages(data, self.instance.redeemed)
|
Voucher.clean_max_usages(data, self.instance.redeemed)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
raise ValidationError({"max_usages": e.message})
|
raise ValidationError({"max_usages": e})
|
||||||
check_quota = Voucher.clean_quota_needs_checking(
|
check_quota = Voucher.clean_quota_needs_checking(
|
||||||
data, self.initial_instance_data,
|
data, self.initial_instance_data,
|
||||||
item_changed=data.get('itemvar') != self.initial.get('itemvar'),
|
item_changed=data.get('itemvar') != self.initial.get('itemvar'),
|
||||||
|
|||||||
@@ -581,7 +581,7 @@ class CoreOrderLogEntryType(OrderLogEntryType):
|
|||||||
'The voucher has been set to expire because the recipient removed themselves from the waiting list.'),
|
'The voucher has been set to expire because the recipient removed themselves from the waiting list.'),
|
||||||
'pretix.voucher.changed': _('The voucher has been changed.'),
|
'pretix.voucher.changed': _('The voucher has been changed.'),
|
||||||
'pretix.voucher.deleted': _('The voucher has been deleted.'),
|
'pretix.voucher.deleted': _('The voucher has been deleted.'),
|
||||||
'pretix.voucher.added.waitinglist': _('The voucher has been sent to {email} through the waiting list.'),
|
'pretix.voucher.added.waitinglist': _('The voucher has been assigned to {email} through the waiting list.'),
|
||||||
})
|
})
|
||||||
class CoreVoucherLogEntryType(VoucherLogEntryType):
|
class CoreVoucherLogEntryType(VoucherLogEntryType):
|
||||||
pass
|
pass
|
||||||
@@ -719,6 +719,7 @@ class CoreUserImpersonatedLogEntryType(UserImpersonatedLogEntryType):
|
|||||||
'pretix.customer.anonymized': _('The account has been disabled and anonymized.'),
|
'pretix.customer.anonymized': _('The account has been disabled and anonymized.'),
|
||||||
'pretix.customer.password.resetrequested': _('A new password has been requested.'),
|
'pretix.customer.password.resetrequested': _('A new password has been requested.'),
|
||||||
'pretix.customer.password.set': _('A new password has been set.'),
|
'pretix.customer.password.set': _('A new password has been set.'),
|
||||||
|
'pretix.customer.email.error': _('Sending of an email has failed.'),
|
||||||
'pretix.reusable_medium.created': _('The reusable medium has been created.'),
|
'pretix.reusable_medium.created': _('The reusable medium has been created.'),
|
||||||
'pretix.reusable_medium.created.auto': _('The reusable medium has been created automatically.'),
|
'pretix.reusable_medium.created.auto': _('The reusable medium has been created automatically.'),
|
||||||
'pretix.reusable_medium.changed': _('The reusable medium has been changed.'),
|
'pretix.reusable_medium.changed': _('The reusable medium has been changed.'),
|
||||||
@@ -752,6 +753,7 @@ class CoreUserImpersonatedLogEntryType(UserImpersonatedLogEntryType):
|
|||||||
'pretix.user.anonymized': _('This user has been anonymized.'),
|
'pretix.user.anonymized': _('This user has been anonymized.'),
|
||||||
'pretix.user.oauth.authorized': _('The application "{application_name}" has been authorized to access your '
|
'pretix.user.oauth.authorized': _('The application "{application_name}" has been authorized to access your '
|
||||||
'account.'),
|
'account.'),
|
||||||
|
'pretix.user.email.error': _('Sending of an email has failed.'),
|
||||||
'pretix.control.auth.user.forgot_password.mail_sent': _('Password reset mail sent.'),
|
'pretix.control.auth.user.forgot_password.mail_sent': _('Password reset mail sent.'),
|
||||||
'pretix.control.auth.user.forgot_password.recovered': _('The password has been reset.'),
|
'pretix.control.auth.user.forgot_password.recovered': _('The password has been reset.'),
|
||||||
'pretix.control.auth.user.forgot_password.denied.repeated': _('A repeated password reset has been denied, as '
|
'pretix.control.auth.user.forgot_password.denied.repeated': _('A repeated password reset has been denied, as '
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ This signal allows you to put code inside the HTML ``<head>`` tag
|
|||||||
of every page in the backend. You will get the request as the keyword argument
|
of every page in the backend. You will get the request as the keyword argument
|
||||||
``request`` and are expected to return plain HTML.
|
``request`` and are expected to return plain HTML.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
nav_event = EventPluginSignal()
|
nav_event = EventPluginSignal()
|
||||||
@@ -77,7 +77,7 @@ The latter method also allows you to register navigation items as a sub-item of
|
|||||||
If you use this, you should read the documentation on :ref:`how to deal with URLs <urlconf>`
|
If you use this, you should read the documentation on :ref:`how to deal with URLs <urlconf>`
|
||||||
in pretix.
|
in pretix.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
nav_topbar = GlobalSignal()
|
nav_topbar = GlobalSignal()
|
||||||
@@ -131,7 +131,7 @@ Arguments: 'request'
|
|||||||
This signal is sent out to include custom HTML in the top part of the the event dashboard.
|
This signal is sent out to include custom HTML in the top part of the the event dashboard.
|
||||||
Receivers should return HTML.
|
Receivers should return HTML.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
An additional keyword argument ``subevent`` *can* contain a sub-event.
|
An additional keyword argument ``subevent`` *can* contain a sub-event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ should return a list of dictionaries, where each dictionary can have the keys:
|
|||||||
* priority (int, used for ordering, higher comes first, default is 1)
|
* priority (int, used for ordering, higher comes first, default is 1)
|
||||||
* url (str, optional, if the full widget should be a link)
|
* url (str, optional, if the full widget should be a link)
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
An additional keyword argument ``subevent`` *can* contain a sub-event.
|
An additional keyword argument ``subevent`` *can* contain a sub-event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ Arguments: 'form'
|
|||||||
This signal allows you to add additional HTML to the form that is used for modifying vouchers.
|
This signal allows you to add additional HTML to the form that is used for modifying vouchers.
|
||||||
You receive the form object in the ``form`` keyword argument.
|
You receive the form object in the ``form`` keyword argument.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
voucher_form_class = EventPluginSignal()
|
voucher_form_class = EventPluginSignal()
|
||||||
@@ -189,7 +189,7 @@ an asynchronous context. For the bulk creation form, ``save()`` is not called. I
|
|||||||
you can implement ``post_bulk_save(saved_vouchers)`` which may be called multiple times
|
you can implement ``post_bulk_save(saved_vouchers)`` which may be called multiple times
|
||||||
for every batch persisted to the database.
|
for every batch persisted to the database.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
voucher_form_validation = EventPluginSignal()
|
voucher_form_validation = EventPluginSignal()
|
||||||
@@ -200,7 +200,7 @@ This signal allows you to add additional validation to the form that is used for
|
|||||||
creating and modifying vouchers. You will receive the form instance in the ``form``
|
creating and modifying vouchers. You will receive the form instance in the ``form``
|
||||||
argument and the current data state in the ``data`` argument.
|
argument and the current data state in the ``data`` argument.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
quota_detail_html = EventPluginSignal()
|
quota_detail_html = EventPluginSignal()
|
||||||
@@ -210,7 +210,7 @@ Arguments: 'quota'
|
|||||||
This signal allows you to append HTML to a Quota's detail view. You receive the
|
This signal allows you to append HTML to a Quota's detail view. You receive the
|
||||||
quota as argument in the ``quota`` keyword argument.
|
quota as argument in the ``quota`` keyword argument.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
organizer_edit_tabs = DeprecatedSignal()
|
organizer_edit_tabs = DeprecatedSignal()
|
||||||
@@ -241,8 +241,14 @@ If your linked view should stay in the tab-like context of this page, we recomme
|
|||||||
that you use ``pretix.control.views.organizer.OrganizerDetailViewMixin`` for your view
|
that you use ``pretix.control.views.organizer.OrganizerDetailViewMixin`` for your view
|
||||||
and your template inherits from ``pretixcontrol/organizers/base.html``.
|
and your template inherits from ``pretixcontrol/organizers/base.html``.
|
||||||
|
|
||||||
This is a regular django signal (no pretix event signal). Receivers will be passed
|
This is an organizer plugin signal (not an event-level signal). Organizer and
|
||||||
the keyword arguments ``organizer`` and ``request``.
|
hybrid plugins, will receive it if they're active for the current organizer.
|
||||||
|
|
||||||
|
**Deprecation Notice:** Currently, event plugins can always receive this signal,
|
||||||
|
regardless of activation. In the future, event plugins will not be allowed to register
|
||||||
|
to organizer-level signals.
|
||||||
|
|
||||||
|
Receivers will be passed the keyword arguments ``organizer`` and ``request``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
order_info = EventPluginSignal()
|
order_info = EventPluginSignal()
|
||||||
@@ -251,7 +257,7 @@ Arguments: ``order``, ``request``
|
|||||||
|
|
||||||
This signal is sent out to display additional information on the order detail page
|
This signal is sent out to display additional information on the order detail page
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
Additionally, the argument ``order`` and ``request`` are available.
|
Additionally, the argument ``order`` and ``request`` are available.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -261,7 +267,7 @@ Arguments: ``order``, ``position``, ``request``
|
|||||||
|
|
||||||
This signal is sent out to display additional buttons for a single position of an order.
|
This signal is sent out to display additional buttons for a single position of an order.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
Additionally, the argument ``order`` and ``request`` are available.
|
Additionally, the argument ``order`` and ``request`` are available.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -279,7 +285,7 @@ If your linked view should stay in the tab-like context of this page, we recomme
|
|||||||
that you use ``pretix.control.views.event.EventSettingsViewMixin`` for your view
|
that you use ``pretix.control.views.event.EventSettingsViewMixin`` for your view
|
||||||
and your template inherits from ``pretixcontrol/event/settings_base.html``.
|
and your template inherits from ``pretixcontrol/event/settings_base.html``.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
A second keyword argument ``request`` will contain the request object.
|
A second keyword argument ``request`` will contain the request object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -290,7 +296,7 @@ Arguments: 'request'
|
|||||||
This signal is sent out to include template snippets on the settings page of an event
|
This signal is sent out to include template snippets on the settings page of an event
|
||||||
that allows generating a pretix Widget code.
|
that allows generating a pretix Widget code.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
A second keyword argument ``request`` will contain the request object.
|
A second keyword argument ``request`` will contain the request object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -304,11 +310,15 @@ an instance of a form class that you bind yourself when appropriate. Your form w
|
|||||||
as part of the standard validation and rendering cycle and rendered using default bootstrap
|
as part of the standard validation and rendering cycle and rendered using default bootstrap
|
||||||
styles. It is advisable to set a prefix for your form to avoid clashes with other plugins.
|
styles. It is advisable to set a prefix for your form to avoid clashes with other plugins.
|
||||||
|
|
||||||
Your forms may also have two special properties: ``template`` with a template that will be
|
Your forms may also have special properties:
|
||||||
included to render the form, and ``title``, which will be used as a headline. Your template
|
|
||||||
will be passed a ``form`` variable with your form.
|
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
- ``template`` with a template that will be included to render the form. Your template will be passed a ``form``
|
||||||
|
variable with your form.
|
||||||
|
- ``title``, which will be used as a headline.
|
||||||
|
- ``ìs_layouts = True``, if your form should be grouped with the ticket layout settings (mutually exclusive with setting ``title``).
|
||||||
|
- ``group_with_formset = True``, if your form should be grouped with a formset of the same ``title``
|
||||||
|
|
||||||
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
item_formsets = EventPluginSignal()
|
item_formsets = EventPluginSignal()
|
||||||
@@ -326,7 +336,7 @@ Your formset needs to have two special properties: ``template`` with a template
|
|||||||
included to render the formset and ``title`` that will be used as a headline. Your template
|
included to render the formset and ``title`` that will be used as a headline. Your template
|
||||||
will be passed a ``formset`` variable with your formset.
|
will be passed a ``formset`` variable with your formset.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
subevent_forms = EventPluginSignal()
|
subevent_forms = EventPluginSignal()
|
||||||
@@ -347,7 +357,7 @@ Your forms may also have two special properties: ``template`` with a template th
|
|||||||
included to render the form, and ``title``, which will be used as a headline. Your template
|
included to render the form, and ``title``, which will be used as a headline. Your template
|
||||||
will be passed a ``form`` variable with your form.
|
will be passed a ``form`` variable with your form.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
oauth_application_registered = GlobalSignal()
|
oauth_application_registered = GlobalSignal()
|
||||||
@@ -381,5 +391,5 @@ You are required to set ``prefix`` on your form instance. You are required to im
|
|||||||
method on your form that returns a new, filtered query set. You are required to implement a ``filter_to_strings()``
|
method on your form that returns a new, filtered query set. You are required to implement a ``filter_to_strings()``
|
||||||
method on your form that returns a list of strings describing the currently active filters.
|
method on your form that returns a list of strings describing the currently active filters.
|
||||||
|
|
||||||
As with all plugin signals, the ``sender`` keyword argument will contain the event.
|
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -15,6 +15,19 @@
|
|||||||
{% bootstrap_field form.invoice_email_attachment layout="control" %}
|
{% bootstrap_field form.invoice_email_attachment layout="control" %}
|
||||||
{% bootstrap_field form.invoice_email_organizer layout="control" %}
|
{% bootstrap_field form.invoice_email_organizer layout="control" %}
|
||||||
{% bootstrap_field form.invoice_language layout="control" %}
|
{% bootstrap_field form.invoice_language layout="control" %}
|
||||||
|
{% bootstrap_field form.invoice_period layout="control" %}
|
||||||
|
|
||||||
|
{% if not request.event.settings.show_dates_on_frontpage %}
|
||||||
|
<div data-display-dependency="input[name=invoice_period][value=auto],input[name=invoice_period][value=event_date]">
|
||||||
|
<div class="alert alert-warning dynamic">
|
||||||
|
{% blocktrans trimmed %}
|
||||||
|
You configured that your shop is not an event and the event date should not be shown.
|
||||||
|
Therefore, we recommend that you set the date of service to a different option.
|
||||||
|
{% endblocktrans %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% bootstrap_field form.invoice_include_free layout="control" %}
|
{% bootstrap_field form.invoice_include_free layout="control" %}
|
||||||
{% bootstrap_field form.invoice_show_payments layout="control" %}
|
{% bootstrap_field form.invoice_show_payments layout="control" %}
|
||||||
{% bootstrap_field form.invoice_reissue_after_modify layout="control" %}
|
{% bootstrap_field form.invoice_reissue_after_modify layout="control" %}
|
||||||
|
|||||||
@@ -177,6 +177,18 @@
|
|||||||
{% for v in formsets.values %}
|
{% for v in formsets.values %}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ v.title }}</legend>
|
<legend>{{ v.title }}</legend>
|
||||||
|
|
||||||
|
{% for f in plugin_forms %}
|
||||||
|
{% if f.group_with_formset and f.title == v.title %}
|
||||||
|
{% if f.template and not "template" in f.fields %}
|
||||||
|
{% include f.template with form=f %}
|
||||||
|
{% else %}
|
||||||
|
{% bootstrap_form f layout="control" %}
|
||||||
|
{% endif %}
|
||||||
|
<hr />
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
{% include v.template with formset=v %}
|
{% include v.template with formset=v %}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -276,7 +288,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
{% for f in plugin_forms %}
|
{% for f in plugin_forms %}
|
||||||
{% if not f.is_layouts and f.title %}
|
{% if not f.is_layouts and not f.group_with_formset and f.title %}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ f.title }}</legend>
|
<legend>{{ f.title }}</legend>
|
||||||
{% if f.template and not "template" in f.fields %}
|
{% if f.template and not "template" in f.fields %}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% trans "Product" %}</th>
|
<th>{% trans "Product" %}</th>
|
||||||
<th>{% trans "Canceled" %}¹</th>
|
<th>{% trans "Canceled" %}</th>
|
||||||
<th>{% trans "Expired" %}</th>
|
<th>{% trans "Expired" %}</th>
|
||||||
<th>{% trans "Approval pending" %}</th>
|
<th>{% trans "Approval pending" %}</th>
|
||||||
<th colspan="3" class="text-center">{% trans "Purchased" %}</th>
|
<th colspan="3" class="text-center">{% trans "Purchased" %}</th>
|
||||||
@@ -106,27 +106,27 @@
|
|||||||
<tr class="item {% if tup.0 %}categorized{% endif %}">
|
<tr class="item {% if tup.0 %}categorized{% endif %}">
|
||||||
<td>{{ item }}</td>
|
<td>{{ item }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}&status=c&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}&status=cany&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ item.num.canceled|togglesum:request.event.currency }}
|
{{ item.num.canceled|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}&status=e&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}&status=e&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ item.num.expired|togglesum:request.event.currency }}
|
{{ item.num.expired|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}&status=pa&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}&status=pa&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ item.num.unapproved|togglesum:request.event.currency }}
|
{{ item.num.unapproved|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}&status=na&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}&status=na&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ item.num.pending|togglesum:request.event.currency }}
|
{{ item.num.pending|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}&status=p&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}&status=p&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ item.num.paid|togglesum:request.event.currency }}
|
{{ item.num.paid|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -139,27 +139,27 @@
|
|||||||
<tr class="variation {% if tup.0 %}categorized{% endif %}">
|
<tr class="variation {% if tup.0 %}categorized{% endif %}">
|
||||||
<td>{{ var }}</td>
|
<td>{{ var }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=c&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=cany&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ var.num.canceled|togglesum:request.event.currency }}
|
{{ var.num.canceled|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=e&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=e&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ var.num.expired|togglesum:request.event.currency }}
|
{{ var.num.expired|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=pa&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=pa&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ var.num.unapproved|togglesum:request.event.currency }}
|
{{ var.num.unapproved|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=na&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=na&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ var.num.pending|togglesum:request.event.currency }}
|
{{ var.num.pending|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=p&provider={{ item.provider }}">
|
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&status=p&provider={{ item.provider }}{% if subevent %}&subevent={{ subevent.pk }}{% endif %}">
|
||||||
{{ var.num.paid|togglesum:request.event.currency }}
|
{{ var.num.paid|togglesum:request.event.currency }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -185,7 +185,4 @@
|
|||||||
</tfoot>
|
</tfoot>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<p class="help-block">
|
|
||||||
¹ {% trans "If you click links in this column, you will only find orders that are canceled completely, while the numbers also include single canceled positions within valid orders." %}
|
|
||||||
</p>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -69,34 +69,36 @@
|
|||||||
{% if show_meta %}
|
{% if show_meta %}
|
||||||
<span class="text-muted text-sm">{{ plugin.version }}</span>
|
<span class="text-muted text-sm">{{ plugin.version }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if is_active and level == "organizer" %}
|
{% if is_active or plugin.level == "event" %}
|
||||||
<span class="label label-success" data-is-active>
|
{% if plugin.level == "organizer" %}
|
||||||
<span class="fa fa-check" aria-hidden="true"></span>
|
<span class="label label-success" data-is-active>
|
||||||
{% trans "Active" %}
|
<span class="fa fa-check" aria-hidden="true"></span>
|
||||||
</span>
|
{% trans "Active" %}
|
||||||
{% elif events_counter == events_total %}
|
</span>
|
||||||
<span class="label label-success" data-is-active>
|
{% elif events_total and events_counter == events_total %}
|
||||||
<span class="fa fa-check" aria-hidden="true"></span>
|
<span class="label label-success" data-is-active>
|
||||||
{% trans "Active (all events)" %}
|
<span class="fa fa-check" aria-hidden="true"></span>
|
||||||
</span>
|
{% trans "Active (all events)" %}
|
||||||
{% elif events_counter %}
|
</span>
|
||||||
<span class="label label-info" data-is-active>
|
{% elif events_counter %}
|
||||||
<span class="fa fa-check" aria-hidden="true"></span>
|
<span class="label label-info" data-is-active>
|
||||||
{% blocktrans trimmed count count=events_counter %}
|
<span class="fa fa-check" aria-hidden="true"></span>
|
||||||
Active ({{ count }} event)
|
{% blocktrans trimmed count count=events_counter %}
|
||||||
{% plural %}
|
Active ({{ count }} event)
|
||||||
Active ({{ count }} events)
|
{% plural %}
|
||||||
{% endblocktrans %}
|
Active ({{ count }} events)
|
||||||
</span>
|
{% endblocktrans %}
|
||||||
{% elif level == "event_organizer" %}
|
</span>
|
||||||
<span class="label label-info" data-is-active>
|
{% elif level == "event_organizer" %}
|
||||||
<span class="fa fa-check" aria-hidden="true"></span>
|
<span class="label label-info" data-is-active>
|
||||||
{% blocktrans trimmed count count=0 %}
|
<span class="fa fa-check" aria-hidden="true"></span>
|
||||||
Active ({{ count }} event)
|
{% blocktrans trimmed count count=0 %}
|
||||||
{% plural %}
|
Active ({{ count }} event)
|
||||||
Active ({{ count }} events)
|
{% plural %}
|
||||||
{% endblocktrans %}
|
Active ({{ count }} events)
|
||||||
</span>
|
{% endblocktrans %}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</h4>
|
</h4>
|
||||||
{% include "pretixcontrol/event/fragment_plugin_description.html" with plugin=plugin %}
|
{% include "pretixcontrol/event/fragment_plugin_description.html" with plugin=plugin %}
|
||||||
|
|||||||
@@ -238,7 +238,7 @@
|
|||||||
<div class="row control-group pdf-info">
|
<div class="row control-group pdf-info">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<label for="pdf-info-name">{% trans "Layout name" %}</label><br>
|
<label for="pdf-info-name">{% trans "Layout name" %}</label><br>
|
||||||
<input type="text" id="pdf-info-name" class="input-block-level form-control" name="name" value="{{ name }}">
|
<input type="text" id="pdf-info-name" class="input-block-level form-control" name="name" value="{{ name }}" maxlength="190">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -82,27 +82,35 @@ class ControlSyncJob(OrderView):
|
|||||||
messages.success(self.request, _('The sync job has been enqueued and will run in the next minutes.'))
|
messages.success(self.request, _('The sync job has been enqueued and will run in the next minutes.'))
|
||||||
elif self.request.POST.get("cancel_job"):
|
elif self.request.POST.get("cancel_job"):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
job = self.order.queued_sync_jobs.select_for_update(of=OF_SELF).get(
|
try:
|
||||||
pk=self.request.POST.get("cancel_job")
|
job = self.order.queued_sync_jobs.select_for_update(of=OF_SELF).get(
|
||||||
)
|
pk=self.request.POST.get("cancel_job")
|
||||||
if job.in_flight:
|
)
|
||||||
messages.warning(self.request, _('The sync job is already in progress.'))
|
except OrderSyncQueue.DoesNotExist:
|
||||||
|
messages.info(self.request, _('The sync job could not be found. It may have been processed in the meantime.'))
|
||||||
else:
|
else:
|
||||||
job.delete()
|
if job.in_flight:
|
||||||
messages.success(self.request, _('The sync job has been canceled.'))
|
messages.warning(self.request, _('The sync job is already in progress.'))
|
||||||
|
else:
|
||||||
|
job.delete()
|
||||||
|
messages.success(self.request, _('The sync job has been canceled.'))
|
||||||
elif self.request.POST.get("run_job_now"):
|
elif self.request.POST.get("run_job_now"):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
job = self.order.queued_sync_jobs.select_for_update(of=OF_SELF).get(
|
try:
|
||||||
pk=self.request.POST.get("run_job_now")
|
job = self.order.queued_sync_jobs.select_for_update(of=OF_SELF).get(
|
||||||
)
|
pk=self.request.POST.get("run_job_now")
|
||||||
if job.in_flight:
|
)
|
||||||
messages.success(self.request, _('The sync job is already in progress.'))
|
except OrderSyncQueue.DoesNotExist:
|
||||||
|
messages.info(self.request, _('The sync job could not be found. It may have been processed in the meantime.'))
|
||||||
else:
|
else:
|
||||||
job.not_before = now()
|
if job.in_flight:
|
||||||
job.need_manual_retry = None
|
messages.success(self.request, _('The sync job is already in progress.'))
|
||||||
job.save()
|
else:
|
||||||
sync_single.apply_async(args=(job.pk,))
|
job.not_before = now()
|
||||||
messages.success(self.request, _('The sync job has been set to run as soon as possible.'))
|
job.need_manual_retry = None
|
||||||
|
job.save()
|
||||||
|
sync_single.apply_async(args=(job.pk,))
|
||||||
|
messages.success(self.request, _('The sync job has been set to run as soon as possible.'))
|
||||||
|
|
||||||
return redirect(self.get_order_url())
|
return redirect(self.get_order_url())
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,18 @@ class MessageView(TemplateView):
|
|||||||
class LogDetailView(AdministratorPermissionRequiredMixin, View):
|
class LogDetailView(AdministratorPermissionRequiredMixin, View):
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
le = get_object_or_404(LogEntry, pk=request.GET.get('pk'))
|
le = get_object_or_404(LogEntry, pk=request.GET.get('pk'))
|
||||||
return JsonResponse({'action_type': le.action_type, 'content_type': str(le.content_type), 'object_id': le.object_id, 'data': le.parsed_data})
|
try:
|
||||||
|
object_repr = repr(le.content_object)
|
||||||
|
except Exception as e:
|
||||||
|
object_repr = 'Error: ' + str(e)
|
||||||
|
return JsonResponse({
|
||||||
|
'datetime': le.datetime.isoformat(),
|
||||||
|
'action_type': le.action_type,
|
||||||
|
'content_type': str(le.content_type),
|
||||||
|
'object_id': le.object_id,
|
||||||
|
'object_repr': object_repr,
|
||||||
|
'data': le.parsed_data,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class PaymentDetailView(AdministratorPermissionRequiredMixin, View):
|
class PaymentDetailView(AdministratorPermissionRequiredMixin, View):
|
||||||
|
|||||||
@@ -711,11 +711,15 @@ class OrderDownload(AsyncAction, OrderView):
|
|||||||
)
|
)
|
||||||
return resp
|
return resp
|
||||||
elif isinstance(value, CachedCombinedTicket):
|
elif isinstance(value, CachedCombinedTicket):
|
||||||
resp = FileResponse(value.file.file, content_type=value.type)
|
if value.type == 'text/uri-list':
|
||||||
resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
|
resp = HttpResponseRedirect(value.file.file.read())
|
||||||
self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension
|
return resp
|
||||||
)
|
else:
|
||||||
return resp
|
resp = FileResponse(value.file.file, content_type=value.type)
|
||||||
|
resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
|
||||||
|
self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension
|
||||||
|
)
|
||||||
|
return resp
|
||||||
else:
|
else:
|
||||||
return redirect(self.get_self_url())
|
return redirect(self.get_self_url())
|
||||||
|
|
||||||
@@ -2575,6 +2579,11 @@ class OverView(EventPermissionRequiredMixin, TemplateView):
|
|||||||
self.request.event,
|
self.request.event,
|
||||||
fees=True
|
fees=True
|
||||||
)
|
)
|
||||||
|
ctx['subevent'] = (
|
||||||
|
self.request.event.has_subevents and
|
||||||
|
self.filter_form.is_valid() and
|
||||||
|
self.filter_form.cleaned_data.get('subevent')
|
||||||
|
)
|
||||||
ctx['subevent_warning'] = (
|
ctx['subevent_warning'] = (
|
||||||
self.request.event.has_subevents and
|
self.request.event.has_subevents and
|
||||||
self.filter_form.is_valid() and
|
self.filter_form.is_valid() and
|
||||||
@@ -2827,11 +2836,23 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView):
|
|||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return self.get_scheduled_queryset()
|
return self.get_scheduled_queryset()
|
||||||
|
|
||||||
|
def has_permission(self):
|
||||||
|
return self.request.user.has_event_permission(self.request.organizer, self.request.event, "can_view_orders")
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
if "schedule" in self.request.POST or self.scheduled:
|
if "schedule" in self.request.POST or self.scheduled:
|
||||||
ctx['schedule_form'] = self.schedule_form
|
if "schedule" in self.request.POST and not self.has_permission():
|
||||||
ctx['rrule_form'] = self.rrule_form
|
messages.error(
|
||||||
|
self.request,
|
||||||
|
_(
|
||||||
|
"Your user account does not have sufficient permission to run this report, therefore "
|
||||||
|
"you cannot schedule it."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ctx['schedule_form'] = self.schedule_form
|
||||||
|
ctx['rrule_form'] = self.rrule_form
|
||||||
elif not self.exporter:
|
elif not self.exporter:
|
||||||
for s in ctx['scheduled']:
|
for s in ctx['scheduled']:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -2189,11 +2189,28 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView):
|
|||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return self.get_scheduled_queryset()
|
return self.get_scheduled_queryset()
|
||||||
|
|
||||||
|
def has_permission(self):
|
||||||
|
if isinstance(self.exporter, OrganizerLevelExportMixin):
|
||||||
|
if not self.request.user.has_organizer_permission(self.request.organizer, self.exporter.organizer_required_permission):
|
||||||
|
return False
|
||||||
|
if self.exporter and not self.exporter.available_for_user(self.request.user):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
ctx = super().get_context_data(**kwargs)
|
ctx = super().get_context_data(**kwargs)
|
||||||
if "schedule" in self.request.POST or self.scheduled:
|
if "schedule" in self.request.POST or self.scheduled:
|
||||||
ctx['schedule_form'] = self.schedule_form
|
if "schedule" in self.request.POST and not self.has_permission():
|
||||||
ctx['rrule_form'] = self.rrule_form
|
messages.error(
|
||||||
|
self.request,
|
||||||
|
_(
|
||||||
|
"Your user account does not have sufficient permission to run this report, therefore "
|
||||||
|
"you cannot schedule it."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
ctx['schedule_form'] = self.schedule_form
|
||||||
|
ctx['rrule_form'] = self.rrule_form
|
||||||
elif not self.exporter:
|
elif not self.exporter:
|
||||||
for s in ctx['scheduled']:
|
for s in ctx['scheduled']:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -174,21 +174,38 @@ class SubEventDelete(EventPermissionRequiredMixin, CompatDeleteView):
|
|||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|
||||||
@transaction.atomic
|
|
||||||
def delete(self, request, *args, **kwargs):
|
def delete(self, request, *args, **kwargs):
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
success_url = self.get_success_url()
|
success_url = self.get_success_url()
|
||||||
|
|
||||||
if not self.object.allow_delete():
|
try:
|
||||||
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
with transaction.atomic():
|
||||||
'placed.'))
|
if not self.object.allow_delete():
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
messages.error(request, pgettext_lazy('subevent', 'A date can not be deleted if orders already have been '
|
||||||
|
'placed.'))
|
||||||
|
return HttpResponseRedirect(success_url)
|
||||||
|
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
||||||
|
CartPosition.objects.filter(addon_to__subevent=self.object).delete()
|
||||||
|
self.object.cartposition_set.all().delete()
|
||||||
|
self.object.delete()
|
||||||
|
except ProtectedError:
|
||||||
|
if self.object.active:
|
||||||
|
with transaction.atomic():
|
||||||
|
self.object.log_action(
|
||||||
|
'pretix.subevent.changed', user=self.request.user, data={
|
||||||
|
'active': False
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.object.active = False
|
||||||
|
self.object.save(update_fields=['active'])
|
||||||
|
messages.error(self.request, pgettext_lazy(
|
||||||
|
'subevent',
|
||||||
|
'The date could not be deleted as some constraints (e.g. data created by plug-ins) did not allow '
|
||||||
|
'it. The date was disabled instead.'
|
||||||
|
))
|
||||||
else:
|
else:
|
||||||
self.object.log_action('pretix.subevent.deleted', user=self.request.user)
|
|
||||||
CartPosition.objects.filter(addon_to__subevent=self.object).delete()
|
|
||||||
self.object.cartposition_set.all().delete()
|
|
||||||
self.object.delete()
|
|
||||||
messages.success(request, pgettext_lazy('subevent', 'The selected date has been deleted.'))
|
messages.success(request, pgettext_lazy('subevent', 'The selected date has been deleted.'))
|
||||||
|
|
||||||
return HttpResponseRedirect(success_url)
|
return HttpResponseRedirect(success_url)
|
||||||
|
|
||||||
def get_success_url(self) -> str:
|
def get_success_url(self) -> str:
|
||||||
|
|||||||
@@ -710,9 +710,9 @@ class UserNotificationsEditView(TemplateView):
|
|||||||
|
|
||||||
messages.success(request, _('Your notification settings have been saved.'))
|
messages.success(request, _('Your notification settings have been saved.'))
|
||||||
if request.user.notifications_send:
|
if request.user.notifications_send:
|
||||||
self.request.user.log_action('pretix.user.settings.notifications.disabled', user=self.request.user)
|
|
||||||
else:
|
|
||||||
self.request.user.log_action('pretix.user.settings.notifications.enabled', user=self.request.user)
|
self.request.user.log_action('pretix.user.settings.notifications.enabled', user=self.request.user)
|
||||||
|
else:
|
||||||
|
self.request.user.log_action('pretix.user.settings.notifications.disabled', user=self.request.user)
|
||||||
return redirect(
|
return redirect(
|
||||||
reverse('control:user.settings.notifications') +
|
reverse('control:user.settings.notifications') +
|
||||||
('?event={}'.format(self.event.pk) if self.event else '')
|
('?event={}'.format(self.event.pk) if self.event else '')
|
||||||
|
|||||||
@@ -21,7 +21,8 @@
|
|||||||
#
|
#
|
||||||
import contextlib
|
import contextlib
|
||||||
|
|
||||||
from django.core.exceptions import FieldDoesNotExist
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
Aggregate, Expression, F, Field, Lookup, OrderBy, Value,
|
Aggregate, Expression, F, Field, Lookup, OrderBy, Value,
|
||||||
@@ -62,6 +63,43 @@ def casual_reads():
|
|||||||
yield
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def repeatable_reads_transaction():
|
||||||
|
"""
|
||||||
|
pretix, and Django, operate in the transaction isolation level READ COMMITTED by default. This is not a strong level
|
||||||
|
of isolation, but we NEED to use it: Otherwise e.g. our quota logic breaks, because we need to be able to get the
|
||||||
|
*current* number of tickets sold at any time in a transaction, not the number of tickets sold *before* our transaction
|
||||||
|
started.
|
||||||
|
|
||||||
|
However, this isolation mode has drawbacks, for example during reporting. When a user retrieves a report from the
|
||||||
|
system, it should return numbers that are consistent with each other. However, if the report makes multiple SQL
|
||||||
|
queries in READ COMMITTED mode, the results might be different for each query, causing numbers to be inconsistent
|
||||||
|
with each other.
|
||||||
|
|
||||||
|
This context manager creates a transaction that is running in REPEATABLE READ mode to avoid this problem.
|
||||||
|
|
||||||
|
**You should only make read-only queries during this transaction and not rely on quota calculations.**
|
||||||
|
"""
|
||||||
|
is_under_test = 'tests.testdummy' in settings.INSTALLED_APPS
|
||||||
|
try:
|
||||||
|
with transaction.atomic(durable=not is_under_test):
|
||||||
|
if not is_under_test:
|
||||||
|
# We're not running this in tests, where we can basically not use this since the test runner does its
|
||||||
|
# own transaction logic for efficiency
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
if 'postgresql' in settings.DATABASES['default']['ENGINE']:
|
||||||
|
cursor.execute('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;')
|
||||||
|
elif 'sqlite' in settings.DATABASES['default']['ENGINE']:
|
||||||
|
pass # noop
|
||||||
|
else:
|
||||||
|
raise ImproperlyConfigured("Cannot set transaction isolation mode on this database backend")
|
||||||
|
|
||||||
|
connection.tx_in_repeatable_read = True
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
connection.tx_in_repeatable_read = False
|
||||||
|
|
||||||
|
|
||||||
class GroupConcat(Aggregate):
|
class GroupConcat(Aggregate):
|
||||||
function = 'group_concat'
|
function = 'group_concat'
|
||||||
template = '%(function)s(%(distinct)s%(field)s, "%(separator)s")'
|
template = '%(function)s(%(distinct)s%(field)s, "%(separator)s")'
|
||||||
|
|||||||
@@ -34,9 +34,7 @@
|
|||||||
|
|
||||||
from django.utils.html import format_html
|
from django.utils.html import format_html
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import (
|
from django.utils.translation import get_language, pgettext_lazy
|
||||||
get_language, gettext_lazy as _, pgettext_lazy,
|
|
||||||
)
|
|
||||||
|
|
||||||
from pretix.helpers.templatetags.date_fast import date_fast as _date
|
from pretix.helpers.templatetags.date_fast import date_fast as _date
|
||||||
|
|
||||||
@@ -66,6 +64,16 @@ def daterange(df, dt, as_html=False):
|
|||||||
return format_html(base_format, _date(df, "j."), mark_safe(until.strip()), _date(dt, "j. F Y"))
|
return format_html(base_format, _date(df, "j."), mark_safe(until.strip()), _date(dt, "j. F Y"))
|
||||||
elif df.year == dt.year:
|
elif df.year == dt.year:
|
||||||
return format_html(base_format, _date(df, "j. F"), until, _date(dt, "j. F Y"))
|
return format_html(base_format, _date(df, "j. F"), until, _date(dt, "j. F Y"))
|
||||||
|
elif lng == "en-nz":
|
||||||
|
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
|
||||||
|
# Mon, 15 January 2024
|
||||||
|
return format_html(base_format, _date(df, "D, j F Y"))
|
||||||
|
elif df.year == dt.year and df.month == dt.month:
|
||||||
|
# 1 – 3 January 2024
|
||||||
|
return format_html(base_format, _date(df, "j"), until, _date(dt, "j F Y"))
|
||||||
|
elif df.year == dt.year:
|
||||||
|
# 1 January – 3 April 2024
|
||||||
|
return format_html(base_format, _date(df, "j F"), until, _date(dt, "j F Y"))
|
||||||
elif lng.startswith("en"):
|
elif lng.startswith("en"):
|
||||||
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
|
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
|
||||||
return format_html(base_format, _date(df, "D, N jS, Y"))
|
return format_html(base_format, _date(df, "D, N jS, Y"))
|
||||||
@@ -103,7 +111,7 @@ def daterange(df, dt, as_html=False):
|
|||||||
until=until,
|
until=until,
|
||||||
)
|
)
|
||||||
|
|
||||||
return _("{date_from}{until}{date_to}").format(
|
return "{date_from}{until}{date_to}".format(
|
||||||
date_from=_date(df, "DATE_FORMAT"),
|
date_from=_date(df, "DATE_FORMAT"),
|
||||||
date_to=_date(dt, "DATE_FORMAT"),
|
date_to=_date(dt, "DATE_FORMAT"),
|
||||||
until=until,
|
until=until,
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#
|
||||||
|
# This file is part of pretix (Community Edition).
|
||||||
|
#
|
||||||
|
# Copyright (C) 2014-2020 Raphael Michel and contributors
|
||||||
|
# Copyright (C) 2020-2021 rami.io GmbH and contributors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
|
||||||
|
# Public License as published by the Free Software Foundation in version 3 of the License.
|
||||||
|
#
|
||||||
|
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
|
||||||
|
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
|
||||||
|
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
|
||||||
|
# this file, see <https://pretix.eu/about/en/license>.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#
|
||||||
|
# This file is part of pretix (Community Edition).
|
||||||
|
#
|
||||||
|
# Copyright (C) 2014-2020 Raphael Michel and contributors
|
||||||
|
# Copyright (C) 2020-2021 rami.io GmbH and contributors
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
|
||||||
|
# Public License as published by the Free Software Foundation in version 3 of the License.
|
||||||
|
#
|
||||||
|
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
|
||||||
|
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
|
||||||
|
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
|
||||||
|
# this file, see <https://pretix.eu/about/en/license>.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Date according to https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
# Following NZ government guidance from https://www.digital.govt.nz/standards-and-guidance/design-and-ux/content-design-guidance/writing-style/numbers
|
||||||
|
DATE_FORMAT = "j F Y" # 12 December 2015
|
||||||
|
DATETIME_FORMAT = "j F Y, g:ia" # 12 December 2015, 5:30pm
|
||||||
|
TIME_FORMAT = "g:ia" # 5:30pm
|
||||||
|
YEAR_MONTH_FORMAT = "F Y" # December 2015
|
||||||
|
MONTH_DAY_FORMAT = "j F" # 12 December
|
||||||
|
SHORT_DATE_FORMAT = "j F Y" # same as DATE_FORMAT per guidance
|
||||||
|
SHORT_DATETIME_FORMAT = "j F Y, g:ia"
|
||||||
|
WEEKDAY_FORMAT = "l" # Monday
|
||||||
|
WEEKDAY_DATE_FORMAT = "l, j F Y" # Friday, 23 November 2018
|
||||||
|
WEEK_FORMAT = "\\W W, o" # ISO week: "W 52, 2024"
|
||||||
|
WEEK_DAY_FORMAT = "D, j M" # Abbrev weekday and month: "Mon, 5 Feb"
|
||||||
|
SHORT_MONTH_DAY_FORMAT = "j/n" # Numeric day/month: "5/2"
|
||||||
|
|
||||||
|
# Parsing inputs; keep d/m/Y and ISO
|
||||||
|
DATE_INPUT_FORMATS = [
|
||||||
|
"%d/%m/%Y",
|
||||||
|
"%Y-%m-%d",
|
||||||
|
"%d/%m/%y",
|
||||||
|
]
|
||||||
|
|
||||||
|
TIME_INPUT_FORMATS = [
|
||||||
|
"%I:%M%p", # 5:30pm
|
||||||
|
"%H:%M:%S",
|
||||||
|
"%H:%M:%S.%f",
|
||||||
|
"%H:%M",
|
||||||
|
]
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
|
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
|
||||||
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
|
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
|
||||||
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -359,12 +359,12 @@ msgstr "لا"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "إغلاق"
|
msgstr "إغلاق"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "مطلوب"
|
msgstr "مطلوب"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -372,11 +372,11 @@ msgstr ""
|
|||||||
"تتم معالجة طلبك حاليا. قد يستغرق الأمر بضع دقائق بناء على حجم الفعالية التي "
|
"تتم معالجة طلبك حاليا. قد يستغرق الأمر بضع دقائق بناء على حجم الفعالية التي "
|
||||||
"اخترت."
|
"اخترت."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr "طلبك قيد الانتظار وستتم معالجته قريبا."
|
msgstr "طلبك قيد الانتظار وستتم معالجته قريبا."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -385,36 +385,36 @@ msgstr ""
|
|||||||
"وصل طلبك للخادم وننتظر تنفيذه. إذا استغرق الأمر أكثر من دقيقتين تواصل معنا "
|
"وصل طلبك للخادم وننتظر تنفيذه. إذا استغرق الأمر أكثر من دقيقتين تواصل معنا "
|
||||||
"أو عاود المحاولة مجددا."
|
"أو عاود المحاولة مجددا."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "حدث خطأ من نوع {code}."
|
msgstr "حدث خطأ من نوع {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr "لم نتمكن من الاتصال بالخادم، لكن سنواصل المحاولة، رمز آخر خطأ: {code}"
|
msgstr "لم نتمكن من الاتصال بالخادم، لكن سنواصل المحاولة، رمز آخر خطأ: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "استغرقت الطلب فترة طويلة، الرجاء المحاولة مرة أخرى."
|
msgstr "استغرقت الطلب فترة طويلة، الرجاء المحاولة مرة أخرى."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"لا يمكننا الوصول إلى الخادم حاليا، حاول مرة أخرى من فضلك. رمز الخطأ : {code}"
|
"لا يمكننا الوصول إلى الخادم حاليا، حاول مرة أخرى من فضلك. رمز الخطأ : {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "جاري معالجة طلبك …"
|
msgstr "جاري معالجة طلبك …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -423,11 +423,11 @@ msgstr ""
|
|||||||
"نعمل الآن على ارسال طلبك إلى الخادم، إذا أستغرقت العملية أكثر من دقيقة، يرجى "
|
"نعمل الآن على ارسال طلبك إلى الخادم، إذا أستغرقت العملية أكثر من دقيقة، يرجى "
|
||||||
"التحقق من اتصالك بالإنترنت ثم أعد تحميل الصفحة مرة أخرى."
|
"التحقق من اتصالك بالإنترنت ثم أعد تحميل الصفحة مرة أخرى."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "أغلق الرسالة"
|
msgstr "أغلق الرسالة"
|
||||||
|
|
||||||
@@ -798,7 +798,7 @@ msgstr "ستسترد %(currency)%(amount)"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "الرجاء إدخال المبلغ الذي يمكن للمنظم الاحتفاظ به."
|
msgstr "الرجاء إدخال المبلغ الذي يمكن للمنظم الاحتفاظ به."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "التوقيت المحلي:"
|
msgstr "التوقيت المحلي:"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
|
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
|
||||||
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
|
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
|
||||||
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -345,70 +345,70 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cart expired"
|
#| msgid "Cart expired"
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "Cistella expirada"
|
msgstr "Cistella expirada"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Estem processant la vostra sol·licitud …"
|
msgstr "Estem processant la vostra sol·licitud …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -751,7 +751,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,9 +7,9 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-05-16 17:00+0000\n"
|
"PO-Revision-Date: 2025-09-08 18:57+0000\n"
|
||||||
"Last-Translator: David <davemachala@gmail.com>\n"
|
"Last-Translator: Alois Pospíšil <alois.pospisil@gmail.com>\n"
|
||||||
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
"cs/>\n"
|
"cs/>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
@@ -17,7 +17,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
"X-Generator: Weblate 5.11.4\n"
|
"X-Generator: Weblate 5.13\n"
|
||||||
|
|
||||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||||
@@ -345,12 +345,12 @@ msgstr "Ne"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "zavřít"
|
msgstr "zavřít"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "povinný"
|
msgstr "povinný"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -358,11 +358,11 @@ msgstr ""
|
|||||||
"Váš požadavek je právě zpracováván. V závislosti na velikosti vaší udalosti, "
|
"Váš požadavek je právě zpracováván. V závislosti na velikosti vaší udalosti, "
|
||||||
"to může trvat několik minut."
|
"to může trvat několik minut."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr "Váš požadavek byl vložem do fronty serveru a brzy bude zpracován."
|
msgstr "Váš požadavek byl vložem do fronty serveru a brzy bude zpracován."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -372,14 +372,14 @@ msgstr ""
|
|||||||
"Pokud to trvá více jak dvě minuty, prosím kontaktuje nás nebo se vraťte do "
|
"Pokud to trvá více jak dvě minuty, prosím kontaktuje nás nebo se vraťte do "
|
||||||
"vašeho prohlížeče a zkuste to znovu."
|
"vašeho prohlížeče a zkuste to znovu."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Vyskytla se chyba {code}."
|
msgstr "Vyskytla se chyba {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -387,12 +387,12 @@ msgstr ""
|
|||||||
"Momentálně nemůžeme kontaktovat server, ale stále se o to pokoušíme. "
|
"Momentálně nemůžeme kontaktovat server, ale stále se o to pokoušíme. "
|
||||||
"Poslední chybový kód: {code}"
|
"Poslední chybový kód: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Zpracování požadavku trvá příliš dlouho. Prosím zkuste to znovu."
|
msgstr "Zpracování požadavku trvá příliš dlouho. Prosím zkuste to znovu."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -400,11 +400,11 @@ msgstr ""
|
|||||||
"Momentálně nemůžeme kontaktovat server. Prosím zkuste to znovu. Chybový kód: "
|
"Momentálně nemůžeme kontaktovat server. Prosím zkuste to znovu. Chybový kód: "
|
||||||
"{code}"
|
"{code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Zpracováváme váš požadavek …"
|
msgstr "Zpracováváme váš požadavek …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -414,11 +414,11 @@ msgstr ""
|
|||||||
"prosím zkontrolujte své internetové připojení a znovu načtěte stránku a "
|
"prosím zkontrolujte své internetové připojení a znovu načtěte stránku a "
|
||||||
"zkuste to znovu."
|
"zkuste to znovu."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Zavřít zprávu"
|
msgstr "Zavřít zprávu"
|
||||||
|
|
||||||
@@ -640,19 +640,15 @@ msgid "Unknown error."
|
|||||||
msgstr "Neznámá chyba."
|
msgstr "Neznámá chyba."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/main.js:292
|
#: pretix/static/pretixcontrol/js/ui/main.js:292
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Your color has great contrast and is very easy to read!"
|
|
||||||
msgid "Your color has great contrast and will provide excellent accessibility."
|
msgid "Your color has great contrast and will provide excellent accessibility."
|
||||||
msgstr "Tato barva má velmi dobrý kontrast a je velmi dobře čitelná!"
|
msgstr "Tato barva má velmi dobrý kontrast a je velmi dobře čitelná."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/main.js:296
|
#: pretix/static/pretixcontrol/js/ui/main.js:296
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Your color has decent contrast and is probably good-enough to read!"
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your color has decent contrast and is sufficient for minimum accessibility "
|
"Your color has decent contrast and is sufficient for minimum accessibility "
|
||||||
"requirements."
|
"requirements."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Tato barva má slušný kontrast a pravděpodobně je dostatečně dobře čitelná!"
|
"Tato barva má slušný kontrast a pravděpodobně je dostatečně dobře čitelná."
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/main.js:300
|
#: pretix/static/pretixcontrol/js/ui/main.js:300
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -735,7 +731,7 @@ msgstr "Nákupní košík vypršel"
|
|||||||
#: pretix/static/pretixpresale/js/ui/cart.js:58
|
#: pretix/static/pretixpresale/js/ui/cart.js:58
|
||||||
#: pretix/static/pretixpresale/js/ui/cart.js:84
|
#: pretix/static/pretixpresale/js/ui/cart.js:84
|
||||||
msgid "Your cart is about to expire."
|
msgid "Your cart is about to expire."
|
||||||
msgstr ""
|
msgstr "Nákupní košík brzy vyprší."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/cart.js:62
|
#: pretix/static/pretixpresale/js/ui/cart.js:62
|
||||||
msgid "The items in your cart are reserved for you for one minute."
|
msgid "The items in your cart are reserved for you for one minute."
|
||||||
@@ -748,10 +744,8 @@ msgstr[2] ""
|
|||||||
"Produkty v nákupním košíku jsou pro vás rezervovány na dalších {num} minut."
|
"Produkty v nákupním košíku jsou pro vás rezervovány na dalších {num} minut."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/cart.js:83
|
#: pretix/static/pretixpresale/js/ui/cart.js:83
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Cart expired"
|
|
||||||
msgid "Your cart has expired."
|
msgid "Your cart has expired."
|
||||||
msgstr "Nákupní košík vypršel"
|
msgstr "Nákupní košík vypršel."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
@@ -785,7 +779,7 @@ msgstr "Dostanete %(currency)s %(amount)s zpět"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "Zadejte částku, kterou si organizátor může ponechat."
|
msgstr "Zadejte částku, kterou si organizátor může ponechat."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Místní čas:"
|
msgstr "Místní čas:"
|
||||||
|
|
||||||
@@ -811,12 +805,12 @@ msgstr "Zvýšit počet"
|
|||||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
msgid "Filter events by"
|
msgid "Filter events by"
|
||||||
msgstr ""
|
msgstr "Filtrovat události"
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
msgid "Filter"
|
msgid "Filter"
|
||||||
msgstr ""
|
msgstr "Filtrovat"
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
@@ -933,7 +927,7 @@ msgstr "Již není k dispozici"
|
|||||||
#: pretix/static/pretixpresale/js/widget/widget.js:42
|
#: pretix/static/pretixpresale/js/widget/widget.js:42
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
msgid "Currently not available"
|
msgid "Currently not available"
|
||||||
msgstr "Momentálně není k dispozici."
|
msgstr "Momentálně není k dispozici"
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/widget/widget.js:44
|
#: pretix/static/pretixpresale/js/widget/widget.js:44
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
@@ -968,7 +962,7 @@ msgstr "Obchod vstupenek otevřit"
|
|||||||
#: pretix/static/pretixpresale/js/widget/widget.js:50
|
#: pretix/static/pretixpresale/js/widget/widget.js:50
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
msgid "Checkout"
|
msgid "Checkout"
|
||||||
msgstr "Checkout"
|
msgstr "Přejít k platbě"
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/widget/widget.js:51
|
#: pretix/static/pretixpresale/js/widget/widget.js:51
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
@@ -1090,7 +1084,7 @@ msgstr "Předchozí týden"
|
|||||||
#: pretix/static/pretixpresale/js/widget/widget.js:74
|
#: pretix/static/pretixpresale/js/widget/widget.js:74
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
msgid "Open seat selection"
|
msgid "Open seat selection"
|
||||||
msgstr "Otevřete výběr sedadla"
|
msgstr "Otevřete výběr míst"
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/widget/widget.js:75
|
#: pretix/static/pretixpresale/js/widget/widget.js:75
|
||||||
msgctxt "widget"
|
msgctxt "widget"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -345,68 +345,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -741,7 +741,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2024-07-10 15:00+0000\n"
|
"PO-Revision-Date: 2024-07-10 15:00+0000\n"
|
||||||
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
|
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
|
||||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -357,14 +357,14 @@ msgstr "Nej"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "Luk"
|
msgstr "Luk"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cart expired"
|
#| msgid "Cart expired"
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "Kurv udløbet"
|
msgstr "Kurv udløbet"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid ""
|
#| msgid ""
|
||||||
#| "Your request has been queued on the server and will now be processed. "
|
#| "Your request has been queued on the server and will now be processed. "
|
||||||
@@ -376,7 +376,7 @@ msgstr ""
|
|||||||
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
|
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
|
||||||
"der gå op til et par minutter."
|
"der gå op til et par minutter."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid ""
|
#| msgid ""
|
||||||
#| "Your request has been queued on the server and will now be processed. "
|
#| "Your request has been queued on the server and will now be processed. "
|
||||||
@@ -386,7 +386,7 @@ msgstr ""
|
|||||||
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
|
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
|
||||||
"der gå op til et par minutter."
|
"der gå op til et par minutter."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -395,14 +395,14 @@ msgstr ""
|
|||||||
"Din forespørgsel er under behandling. Hvis der går mere end to minutter, så "
|
"Din forespørgsel er under behandling. Hvis der går mere end to minutter, så "
|
||||||
"kontakt os eller gå tilbage og prøv igen."
|
"kontakt os eller gå tilbage og prøv igen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Der er sket en fejl ({code})."
|
msgstr "Der er sket en fejl ({code})."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -410,12 +410,12 @@ msgstr ""
|
|||||||
"Vi kan ikke komme i kontakt med serveren, men prøver igen. Seneste fejlkode: "
|
"Vi kan ikke komme i kontakt med serveren, men prøver igen. Seneste fejlkode: "
|
||||||
"{code}"
|
"{code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Forespørgslen tog for lang tid. Prøv igen."
|
msgstr "Forespørgslen tog for lang tid. Prøv igen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -423,11 +423,11 @@ msgstr ""
|
|||||||
"Vi kan i øjeblikket ikke komme i kontakt med serveren. Prøv igen. Fejlkode: "
|
"Vi kan i øjeblikket ikke komme i kontakt med serveren. Prøv igen. Fejlkode: "
|
||||||
"{code}"
|
"{code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Vi behandler din bestilling …"
|
msgstr "Vi behandler din bestilling …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -436,11 +436,11 @@ msgstr ""
|
|||||||
"Din forespørgsel bliver sendt til serveren. Hvis det tager mere end et "
|
"Din forespørgsel bliver sendt til serveren. Hvis det tager mere end et "
|
||||||
"minut, så tjek din internetforbindelse, genindlæs siden og prøv igen."
|
"minut, så tjek din internetforbindelse, genindlæs siden og prøv igen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Luk besked"
|
msgstr "Luk besked"
|
||||||
|
|
||||||
@@ -810,7 +810,7 @@ msgstr "fra %(currency)s %(price)s"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Din lokaltid:"
|
msgstr "Din lokaltid:"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-05-30 11:08+0000\n"
|
"PO-Revision-Date: 2025-05-30 11:08+0000\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -345,12 +345,12 @@ msgstr "Nein"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "schließen"
|
msgstr "schließen"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "erforderlich"
|
msgstr "erforderlich"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -358,13 +358,13 @@ msgstr ""
|
|||||||
"Ihre Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann dies "
|
"Ihre Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann dies "
|
||||||
"einige Minuten dauern."
|
"einige Minuten dauern."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ihre Anfrage befindet sich beim Server in der Warteschlange und wird bald "
|
"Ihre Anfrage befindet sich beim Server in der Warteschlange und wird bald "
|
||||||
"verarbeitet."
|
"verarbeitet."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -375,14 +375,14 @@ msgstr ""
|
|||||||
"bitte oder gehen Sie in Ihrem Browser einen Schritt zurück und versuchen es "
|
"bitte oder gehen Sie in Ihrem Browser einen Schritt zurück und versuchen es "
|
||||||
"erneut."
|
"erneut."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Ein Fehler ist aufgetreten. Fehlercode: {code}"
|
msgstr "Ein Fehler ist aufgetreten. Fehlercode: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -390,12 +390,12 @@ msgstr ""
|
|||||||
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
|
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
|
||||||
"Letzter Fehlercode: {code}"
|
"Letzter Fehlercode: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
|
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -403,11 +403,11 @@ msgstr ""
|
|||||||
"Wir können den Server aktuell nicht erreichen. Bitte versuchen Sie es noch "
|
"Wir können den Server aktuell nicht erreichen. Bitte versuchen Sie es noch "
|
||||||
"einmal. Fehlercode: {code}"
|
"einmal. Fehlercode: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Wir verarbeiten Ihre Anfrage …"
|
msgstr "Wir verarbeiten Ihre Anfrage …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -417,11 +417,11 @@ msgstr ""
|
|||||||
"dauert, prüfen Sie bitte Ihre Internetverbindung. Danach können Sie diese "
|
"dauert, prüfen Sie bitte Ihre Internetverbindung. Danach können Sie diese "
|
||||||
"Seite neu laden und es erneut versuchen."
|
"Seite neu laden und es erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr "Wenn dies länger als einige Minuten dauert, kontaktiere uns bitte."
|
msgstr "Wenn dies länger als einige Minuten dauert, kontaktiere uns bitte."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Schließen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
@@ -771,7 +771,7 @@ msgstr "Sie erhalten %(currency)s %(amount)s zurück"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "Bitte geben Sie den Betrag ein, den der Veranstalter einbehalten darf."
|
msgstr "Bitte geben Sie den Betrag ein, den der Veranstalter einbehalten darf."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Deine lokale Zeit:"
|
msgstr "Deine lokale Zeit:"
|
||||||
|
|
||||||
|
|||||||
+257
-141
@@ -1,125 +1,143 @@
|
|||||||
2FA
|
ABGEKÜNDIGT
|
||||||
ABN
|
ABN
|
||||||
AES
|
|
||||||
Absenderadresse
|
Absenderadresse
|
||||||
Absenderinformation
|
Absenderinformation
|
||||||
Absendername
|
Absendername
|
||||||
ABGEKÜNDIGT
|
|
||||||
Admin
|
Admin
|
||||||
Adminbereich
|
Adminbereich
|
||||||
|
Admin-Modus
|
||||||
|
Admin-Sitzung
|
||||||
|
Admin-Sitzungen
|
||||||
|
AES
|
||||||
Affirm
|
Affirm
|
||||||
AGPL
|
AGPL
|
||||||
AGPLv
|
AGPLv
|
||||||
Alipay
|
Alipay
|
||||||
and
|
and
|
||||||
|
API-Meta-Informationen
|
||||||
|
APM
|
||||||
App
|
App
|
||||||
|
App-Gebühr
|
||||||
ApplePay
|
ApplePay
|
||||||
Apps
|
Apps
|
||||||
APM
|
|
||||||
as
|
as
|
||||||
Aufbuchungen
|
Aufbuchungen
|
||||||
aufeinanderfolgenden
|
aufeinanderfolgenden
|
||||||
Aufteilungsliste
|
|
||||||
aufzubuchen
|
aufzubuchen
|
||||||
auschecken
|
auschecken
|
||||||
Ausgangsscan
|
Ausgangsscan
|
||||||
Ausgangsscans
|
Ausgangsscans
|
||||||
ausgeklappt
|
|
||||||
ausgecheckt
|
ausgecheckt
|
||||||
|
ausgeklappt
|
||||||
auswahl
|
auswahl
|
||||||
Auth
|
|
||||||
Authentication
|
Authentication
|
||||||
Authenticator
|
Authenticator-App
|
||||||
Authentifizierungsmechanismus
|
|
||||||
Autorisierungs
|
|
||||||
Autorisierungscode
|
Autorisierungscode
|
||||||
Backend
|
Autorisierungs-Endpunktes
|
||||||
Badge
|
Badge
|
||||||
|
Badge-Druck
|
||||||
|
Badge-Layout
|
||||||
|
Badge-Layouts
|
||||||
Badges
|
Badges
|
||||||
Bancontact
|
Bancontact
|
||||||
|
Bank-App
|
||||||
BankID
|
BankID
|
||||||
Banking
|
Banking-App
|
||||||
barcodes
|
|
||||||
Baskisch
|
Baskisch
|
||||||
Bcc
|
Bcc
|
||||||
BCC
|
BCC-Adresse
|
||||||
|
Bcc-Kopie
|
||||||
Beispielevent
|
Beispielevent
|
||||||
Beispielproduktvariantenbeschreibung
|
Beispielproduktvariantenbeschreibung
|
||||||
Belarus
|
Belarus
|
||||||
Benachrichtigungs
|
|
||||||
Benachrichtigungsart
|
Benachrichtigungsart
|
||||||
Benachrichtigungsarten
|
Benachrichtigungsarten
|
||||||
Benachrichtigungseinstellungen
|
Benachrichtigungseinstellungen
|
||||||
Berechtigungs
|
Benachrichtigungs-Einstellungen
|
||||||
Bestätigungs
|
Benachrichtigungs-E-Mail
|
||||||
Bestellbestätigungs
|
Benutzer-ID-Feld
|
||||||
|
Benutzer-ID-Felds
|
||||||
|
Bestätigungs-E-Mail
|
||||||
|
Bestellbestätigungs-E-Mail
|
||||||
|
Bestellbestätigungs-E-Mails
|
||||||
Bestellungsänderungen
|
Bestellungsänderungen
|
||||||
Bestellungsstatus
|
Bestellungs-Synchronisation
|
||||||
Bestellungs
|
Bestellungs-Synchronisierung
|
||||||
bez
|
bez
|
||||||
BezahlCode
|
BezahlCode
|
||||||
Bezahlmethode
|
|
||||||
Blackberry
|
Blackberry
|
||||||
BLIK
|
BLIK
|
||||||
Blogpost
|
BN-Code
|
||||||
BN
|
|
||||||
Branding
|
|
||||||
Browsereinstellungen
|
|
||||||
BSD
|
|
||||||
bspw
|
|
||||||
Bokmål
|
Bokmål
|
||||||
Boleto
|
Boleto
|
||||||
Buchhaltungs
|
Branding-Informationen
|
||||||
|
Browsereinstellungen
|
||||||
|
BSD-Lizenz
|
||||||
|
bspw
|
||||||
Bundles
|
Bundles
|
||||||
Butterfly
|
Butterfly-Badge
|
||||||
bzw
|
bzw
|
||||||
ca
|
ca
|
||||||
Ceuta
|
|
||||||
Cc
|
Cc
|
||||||
|
Ceuta
|
||||||
chardet
|
chardet
|
||||||
charge
|
charge
|
||||||
|
Charge-ID
|
||||||
Checkbox
|
Checkbox
|
||||||
|
Check-in-App
|
||||||
|
Check-in-Apps
|
||||||
|
Check-in-QR-Code
|
||||||
Checkout
|
Checkout
|
||||||
Chrome
|
Chrome
|
||||||
Choice
|
Client-ID
|
||||||
Community
|
Client-Secret
|
||||||
|
CODE.txt
|
||||||
|
Community-Übersetzungen
|
||||||
CONFIRM
|
CONFIRM
|
||||||
Connect
|
Connect
|
||||||
Consent
|
Cookie-Consent-Management
|
||||||
|
Cookie-Consent-Mechanismus
|
||||||
Copyleft
|
Copyleft
|
||||||
Cronjob
|
Cronjob
|
||||||
Cross
|
Cronjob-Komponente
|
||||||
|
Cross-Selling-Bedingung
|
||||||
|
Cross-Selling-Kategorie
|
||||||
|
Cross-Selling-Kategorien
|
||||||
|
Cross-Selling-Schritt
|
||||||
csv
|
csv
|
||||||
|
CSV
|
||||||
|
CSV-Datei
|
||||||
|
CSV-Dateien
|
||||||
|
CSV-Eingabe
|
||||||
|
CSV-Eingabedaten
|
||||||
|
CSV-Import
|
||||||
|
CSV-Input
|
||||||
|
CSV-Lesen
|
||||||
|
CSV-Spalte
|
||||||
Customer
|
Customer
|
||||||
CZK
|
CZK
|
||||||
Dashboard
|
Debug-Modus
|
||||||
Datensynchronisation
|
|
||||||
Debug
|
|
||||||
dekodi
|
dekodi
|
||||||
deliverability
|
Desktop-Apps
|
||||||
DNS
|
|
||||||
Di
|
Di
|
||||||
Do
|
Do
|
||||||
Doe
|
|
||||||
Downloadformat
|
Downloadformat
|
||||||
Downloadseite
|
|
||||||
Dr
|
Dr
|
||||||
Drag
|
Drag-and-Drop-Interfaces
|
||||||
Droid
|
|
||||||
Drop
|
|
||||||
DSS
|
|
||||||
Edge
|
Edge
|
||||||
Eingangsscan
|
Eingangsscan
|
||||||
Einlassbuchung
|
Einlassbuchung
|
||||||
Einlassdatum
|
Einlassdatum
|
||||||
Einlasskontrolle
|
Einlasskontrolle
|
||||||
Einlassuhrzeita
|
|
||||||
einzuchecken
|
einzuchecken
|
||||||
email
|
email
|
||||||
Enterprise
|
E-Mail-Renderer
|
||||||
EPC
|
Enterprise-Lizenz
|
||||||
EPS
|
Enterprise-Lizenzen
|
||||||
|
Enterprise-Plugin
|
||||||
|
Enterprise-Plugins
|
||||||
eps
|
eps
|
||||||
|
EPS
|
||||||
Erstattungsbetrag
|
Erstattungsbetrag
|
||||||
Erstattungsliste
|
Erstattungsliste
|
||||||
Erstattungsmethode
|
Erstattungsmethode
|
||||||
@@ -127,175 +145,231 @@ Erstattungsoptionen
|
|||||||
Erstattungsstatus
|
Erstattungsstatus
|
||||||
Erstattungsweg
|
Erstattungsweg
|
||||||
erstmalig
|
erstmalig
|
||||||
Erweiterungs
|
|
||||||
etc
|
etc
|
||||||
|
EU-USt-ID-Nr
|
||||||
Event
|
Event
|
||||||
|
Event-Eigenschaft
|
||||||
Eventeingang
|
Eventeingang
|
||||||
Eventfirma
|
Event-Erstellung
|
||||||
|
Event-Setup-Tool
|
||||||
|
Event-Ticketing-Software
|
||||||
|
Event-Ticketshop
|
||||||
|
Event-Übersicht
|
||||||
|
Event-Website
|
||||||
evtl
|
evtl
|
||||||
Explorer
|
Explorer
|
||||||
FA
|
FA
|
||||||
Favicon
|
Favicon
|
||||||
|
F-Droid
|
||||||
Footer
|
Footer
|
||||||
|
Footer-Link
|
||||||
|
Footer-Text
|
||||||
Galicisch
|
Galicisch
|
||||||
gehostete
|
Geocoding
|
||||||
geht's
|
Geocoding-Daten
|
||||||
GENEXAMPLE
|
Geo-Koordinaten
|
||||||
Geo
|
Geräte-ID
|
||||||
geocoding
|
|
||||||
gescannt
|
gescannt
|
||||||
ggf
|
ggf
|
||||||
GiroCode
|
Ggf
|
||||||
giropay
|
giropay
|
||||||
GPL
|
|
||||||
Grants
|
Grants
|
||||||
Gruppierungswert
|
|
||||||
Gruppierungsspalte
|
Gruppierungsspalte
|
||||||
|
Gruppierungswert
|
||||||
Guide
|
Guide
|
||||||
Gutscheineinlöser
|
Gutscheineinlöser
|
||||||
|
Händler-ID
|
||||||
|
Händler-PayPal-Konto
|
||||||
|
Hardware-Tokengenerator
|
||||||
herunterscrollen
|
herunterscrollen
|
||||||
hochlädst
|
hochlädst
|
||||||
|
HTML-E-Mail-Renderer
|
||||||
HTTPS
|
HTTPS
|
||||||
IBAN
|
HTTPS-Verbindungen
|
||||||
|
HTTPS-Website
|
||||||
IBANs
|
IBANs
|
||||||
iCal
|
iCal
|
||||||
ics
|
ics-Kalenderdatei
|
||||||
ID
|
ID
|
||||||
iDEAL
|
iDEAL
|
||||||
IDs
|
IDs
|
||||||
Inc
|
Inc
|
||||||
inkl
|
inkl
|
||||||
|
innen-Badges
|
||||||
innenname
|
innenname
|
||||||
innennamen
|
innennamen
|
||||||
innergemeinschaftliche
|
innergemeinschaftliche
|
||||||
Innergemeinschaftlicher
|
Innergemeinschaftlicher
|
||||||
Input
|
Installations-ID
|
||||||
Installations
|
Integrationen
|
||||||
integrationen
|
|
||||||
intra
|
|
||||||
INV
|
|
||||||
invalidieren
|
invalidieren
|
||||||
invalidiert
|
invalidiert
|
||||||
ISU
|
|
||||||
iOS
|
iOS
|
||||||
|
ISU
|
||||||
Itaú
|
Itaú
|
||||||
iTunes
|
iTunes
|
||||||
JavaScript
|
JavaScript
|
||||||
JSON
|
JSON-Datei
|
||||||
Kategoriebeschreibung
|
Kategoriebeschreibung
|
||||||
Key
|
|
||||||
Klarna
|
Klarna
|
||||||
Kombitickets
|
Kombitickets
|
||||||
Kompatibilitätsmodus
|
|
||||||
Konfigurations
|
|
||||||
Kosovo
|
|
||||||
land
|
land
|
||||||
landesspezifische
|
landesspezifische
|
||||||
Lead
|
Lead-Scanning
|
||||||
Leaflet
|
Leaflet-Kacheln
|
||||||
Linktext
|
Linktext
|
||||||
lit
|
lit
|
||||||
|
Log-ID
|
||||||
Logindaten
|
Logindaten
|
||||||
Lösch
|
|
||||||
loszulegen
|
|
||||||
Ltd
|
|
||||||
Macau
|
Macau
|
||||||
|
MapQuest-API-Key
|
||||||
max
|
max
|
||||||
MariaDB
|
Medien-ID
|
||||||
MapQuest
|
|
||||||
Melilla
|
Melilla
|
||||||
Mercado
|
Mercado
|
||||||
Merchandise
|
Merchandise
|
||||||
Meta
|
|
||||||
Metadaten
|
Metadaten
|
||||||
|
Meta-Eigenschaft
|
||||||
|
Meta-Eigenschaften
|
||||||
|
Meta-Informationen
|
||||||
Mi
|
Mi
|
||||||
Mifare
|
Mifare
|
||||||
Mitgliedschafts
|
|
||||||
Mitgliedschaftsdauer
|
|
||||||
min
|
min
|
||||||
|
Mitgliedschaftsdauer
|
||||||
|
Mitgliedschafts-Typ
|
||||||
|
Mitgliedschafts-Typen
|
||||||
Mo
|
Mo
|
||||||
MobilePay
|
MobilePay
|
||||||
MOTO
|
MOTO
|
||||||
|
MOTO-Zahlungen
|
||||||
Multibanco
|
Multibanco
|
||||||
|
Multiple-Choice-Fragen
|
||||||
MwSt
|
MwSt
|
||||||
MyBank
|
MyBank
|
||||||
name
|
name
|
||||||
NFC
|
NFC
|
||||||
|
NFC-basierte
|
||||||
|
NFC-Chip
|
||||||
|
NFC-Chips
|
||||||
|
NFC-Medien
|
||||||
|
NFC-Zahlungsmitteln
|
||||||
Nr
|
Nr
|
||||||
NREI
|
NREI
|
||||||
number
|
number
|
||||||
NXP
|
NXP
|
||||||
|
Objekt-IDs
|
||||||
|
Offline-Scan
|
||||||
OK
|
OK
|
||||||
On
|
Online-Banking
|
||||||
Onlinebanking
|
Onlinebanking-Zugangsdaten
|
||||||
Open
|
Open
|
||||||
OpenCage
|
OpenCage-API-Key
|
||||||
OpenID
|
OpenID
|
||||||
OpenStreetMap
|
OpenStreetMap
|
||||||
Opera
|
Opera
|
||||||
Output
|
|
||||||
OXXO
|
OXXO
|
||||||
parsen
|
|
||||||
Pago
|
Pago
|
||||||
|
parsen
|
||||||
Pay
|
Pay
|
||||||
PayPal
|
PayPal
|
||||||
PayPals
|
PayPal-Account
|
||||||
|
PayPal-Accounts
|
||||||
|
PayPal-Konto
|
||||||
|
PayPal-Kontos
|
||||||
|
PayPal-Sandbox
|
||||||
|
PayPal-Sandbox-Account
|
||||||
|
PayPal-Seite
|
||||||
|
PayPal-Verkaufs-ID
|
||||||
|
PayPal-Webhook
|
||||||
|
PayPal-Zahlung
|
||||||
|
PayPal-Zahlungen
|
||||||
|
PayPal-Zahlungs-ID
|
||||||
PayU
|
PayU
|
||||||
PCI
|
PCI-DSS-Formulare
|
||||||
|
Peppol-Netzwerk
|
||||||
|
Peppol-Teilnehmer-ID
|
||||||
|
Peppol-Teilnehmer-IDs
|
||||||
Personalisierung
|
Personalisierung
|
||||||
PEPPOL
|
PKCE-Erweiterung
|
||||||
PKCE
|
|
||||||
Platzhalterzeichen
|
Platzhalterzeichen
|
||||||
Play
|
Play
|
||||||
Plugin
|
Plugin
|
||||||
Plugins
|
Plugins
|
||||||
POS
|
|
||||||
Postfix
|
Postfix
|
||||||
PostgreSQL
|
|
||||||
PPRO
|
PPRO
|
||||||
prefix
|
prefix
|
||||||
|
Prefix
|
||||||
pretix
|
pretix
|
||||||
pretixdesk
|
pretix-Apps
|
||||||
|
pretix-Benutzerkennung
|
||||||
|
pretixdesk-Apps
|
||||||
pretixdroid
|
pretixdroid
|
||||||
pretixPOS
|
pretix-Enterprise-Lizenz
|
||||||
|
pretix-Enterprise-Plugins
|
||||||
|
pretix-Entwickler
|
||||||
|
pretix-Entwicklern
|
||||||
|
pretix-Feld
|
||||||
|
pretix-Installation
|
||||||
|
pretix-Konto
|
||||||
|
pretix-Kontos
|
||||||
|
pretix-Logo
|
||||||
|
pretix-Logos
|
||||||
|
pretix-Plugins
|
||||||
pretixPRINT
|
pretixPRINT
|
||||||
|
pretixPRINT-Version
|
||||||
pretixSCAN
|
pretixSCAN
|
||||||
Professional
|
pretix-Support
|
||||||
|
pretix-Team
|
||||||
|
pretix-Update
|
||||||
|
pretix-Version
|
||||||
|
pretix-Versionen
|
||||||
|
pretix-Widget
|
||||||
|
Produkt-ID
|
||||||
|
Produkt-Metadaten
|
||||||
Przelewy
|
Przelewy
|
||||||
pt
|
pt
|
||||||
px
|
px
|
||||||
Query
|
QR-Code
|
||||||
QR
|
QR-Code-Bereich
|
||||||
|
QR-Code-Geheimnis
|
||||||
|
QR-Code-Inhalt
|
||||||
|
QR-Code-Reader
|
||||||
|
QR-Codes
|
||||||
|
QR-Farbe
|
||||||
|
Query-Parameter
|
||||||
rabattiert
|
rabattiert
|
||||||
|
Rabattiert
|
||||||
Rabattierung
|
Rabattierung
|
||||||
Reader
|
Rechnungs-E-Mail
|
||||||
Rechnungs
|
|
||||||
Rechungsdatei
|
Rechungsdatei
|
||||||
Reddit
|
Reddit
|
||||||
Referer
|
Referer
|
||||||
Registrierungs
|
|
||||||
Registrierungsdatum
|
Registrierungsdatum
|
||||||
|
Registrierungs-Details
|
||||||
Registrierungsnummer
|
Registrierungsnummer
|
||||||
Registrierungsversuche
|
Registrierungsversuche
|
||||||
remote
|
remote
|
||||||
Renderer
|
|
||||||
Request
|
Request
|
||||||
Requests
|
Requests
|
||||||
|
Request-URL
|
||||||
Reservierungszeitraum
|
Reservierungszeitraum
|
||||||
reverse
|
reverse
|
||||||
|
Reverse
|
||||||
|
Reverse-Proxy
|
||||||
Revisionssicherheit
|
Revisionssicherheit
|
||||||
Revolut
|
Revolut
|
||||||
|
Revolut-App
|
||||||
rückabgewickelt
|
rückabgewickelt
|
||||||
Rundungsdifferenzen
|
|
||||||
Sa
|
Sa
|
||||||
Saalplan
|
|
||||||
Sammlungsstücken
|
Sammlungsstücken
|
||||||
SAQ
|
SAQ
|
||||||
SCA
|
SCA
|
||||||
Scan
|
Scan
|
||||||
|
Scanning-Apps
|
||||||
Scans
|
Scans
|
||||||
Scanergebnis
|
Scan-Terminals
|
||||||
Scanning
|
Scan-Typ
|
||||||
|
Scan-Zeitpunkt
|
||||||
schiefgeht
|
schiefgeht
|
||||||
schiefgelaufen
|
schiefgelaufen
|
||||||
Scope
|
Scope
|
||||||
@@ -304,23 +378,37 @@ SdI
|
|||||||
sechsstelligen
|
sechsstelligen
|
||||||
Secret
|
Secret
|
||||||
Security
|
Security
|
||||||
Selling
|
selbst-gehostete
|
||||||
SEPA
|
SEPA-Bankeinzug
|
||||||
Shirts
|
SEPA-Bankkonto
|
||||||
|
SEPA-Konten
|
||||||
|
SEPA-Lastschrift
|
||||||
|
SEPA-Lastschriften
|
||||||
|
SEPA-Mandat
|
||||||
|
SEPA-XML
|
||||||
|
Session-ID
|
||||||
Signaturverfahren
|
Signaturverfahren
|
||||||
Sign
|
Single-Sign-On
|
||||||
|
Single-Sign-On-Dienste
|
||||||
|
Single-Sign-On-Methode
|
||||||
|
Single-Sign-On-Provider
|
||||||
Sitzplanmoduls
|
Sitzplanmoduls
|
||||||
Social
|
Sitzplatz-ID
|
||||||
Sofort
|
Sitzplatz-IDs
|
||||||
SOFORT
|
Social-Media-Bild
|
||||||
Sorry
|
Sorry
|
||||||
Source
|
Source
|
||||||
SPF
|
Source-Codes
|
||||||
|
SPF-Eintrag
|
||||||
SSL
|
SSL
|
||||||
SSO
|
SSO
|
||||||
|
SSO-Client
|
||||||
|
SSO-Clients
|
||||||
|
SSO-Provider
|
||||||
STARTTLS
|
STARTTLS
|
||||||
|
Steuer-Aufteilungsliste
|
||||||
|
Steuerregel-ID
|
||||||
Steuerschuldnerschaft
|
Steuerschuldnerschaft
|
||||||
Store
|
|
||||||
Stornierungsanfrage
|
Stornierungsanfrage
|
||||||
Stornobedingungen
|
Stornobedingungen
|
||||||
Stornobeleg
|
Stornobeleg
|
||||||
@@ -330,58 +418,75 @@ Stornogebühren
|
|||||||
Stornos
|
Stornos
|
||||||
Strg
|
Strg
|
||||||
Stripe
|
Stripe
|
||||||
Stripes
|
Stripe-Account
|
||||||
|
Stripe-App
|
||||||
|
Stripe-Dashboard
|
||||||
|
Stripe-Konto
|
||||||
|
Stripe-Kontos
|
||||||
|
Stripe-Modul
|
||||||
|
Stripe-Support
|
||||||
|
Stripe-Test-API
|
||||||
Strong
|
Strong
|
||||||
Swish
|
Swish
|
||||||
Synchronisations
|
|
||||||
systemweiten
|
systemweiten
|
||||||
Tab
|
Tab
|
||||||
tag
|
tag
|
||||||
Teammitglied
|
Teammitglied
|
||||||
Teamname
|
Teamname
|
||||||
|
Teilnehmer-Badges
|
||||||
Telephone
|
Telephone
|
||||||
|
Terminal-ID
|
||||||
|
Termin-ID
|
||||||
Ticketing
|
Ticketing
|
||||||
Timeout
|
Ticketing-Firma
|
||||||
To
|
Ticket-Output
|
||||||
Tokengenerator
|
Ticket-QR-Code
|
||||||
Toolbar
|
|
||||||
TODO
|
TODO
|
||||||
|
To-Do-Liste
|
||||||
TOTP
|
TOTP
|
||||||
Trace
|
Trace-Nummer
|
||||||
Tracking
|
Tracking
|
||||||
transaktionale
|
transaktionale
|
||||||
Trustly
|
Trustly
|
||||||
Turnover
|
T-Shirts
|
||||||
|
Turnover-Nummer
|
||||||
TWINT
|
TWINT
|
||||||
txt
|
|
||||||
überbuchen
|
überbuchen
|
||||||
überbucht
|
überbucht
|
||||||
überbuchten
|
überbuchten
|
||||||
überzahlt
|
überzahlt
|
||||||
|
Überzahlt
|
||||||
ÜBERZAHLT
|
ÜBERZAHLT
|
||||||
überzahlte
|
überzahlte
|
||||||
|
Überzahlte
|
||||||
|
Überzahlten
|
||||||
uhrzeit
|
uhrzeit
|
||||||
UID
|
UID
|
||||||
|
UID-Basis
|
||||||
|
UID-Schutzfunktion
|
||||||
Ultralight
|
Ultralight
|
||||||
|
umzubuchen
|
||||||
ungespeicherte
|
ungespeicherte
|
||||||
unkategorisiert
|
Unkategorisiert
|
||||||
Unkategorisierte
|
Unkategorisierte
|
||||||
unlöschbar
|
unlöschbar
|
||||||
unlöschbaren
|
unlöschbaren
|
||||||
untenstehende
|
untenstehende
|
||||||
untenstehenden
|
untenstehenden
|
||||||
unterzahlt
|
Unterzahlt
|
||||||
UNTERZAHLT
|
UNTERZAHLT
|
||||||
unzugeordnete
|
unzugeordnete
|
||||||
|
Unzugeordnete
|
||||||
unzugeordneten
|
unzugeordneten
|
||||||
umzubuchen
|
|
||||||
URIs
|
URIs
|
||||||
Ursprüngl
|
Ursprüngl
|
||||||
USt
|
USt
|
||||||
Überweisungs
|
USt-ID
|
||||||
Überzahlten
|
USt-ID-Nr
|
||||||
|
USt-ID-Nummer
|
||||||
Validierung
|
Validierung
|
||||||
Validierungsregeln
|
Validierungsregeln
|
||||||
|
Varianten-ID
|
||||||
Venmo
|
Venmo
|
||||||
Veranstalterdomain
|
Veranstalterdomain
|
||||||
Veranstaltereinstellungen
|
Veranstaltereinstellungen
|
||||||
@@ -394,39 +499,50 @@ Veranstalterseite
|
|||||||
Veranstalterübersicht
|
Veranstalterübersicht
|
||||||
veranstalterweiten
|
veranstalterweiten
|
||||||
Veranstaltungs
|
Veranstaltungs
|
||||||
Veranstalterdomain
|
Veranstaltungs-Metadaten
|
||||||
veranstaltungsweiten
|
veranstaltungsweiten
|
||||||
Verfügbarkeitsberechnung
|
Verfügbarkeitsberechnung
|
||||||
Verfügbarkeitsstatus
|
Verfügbarkeitsstatus
|
||||||
|
Verkaufs-ID
|
||||||
Verkkopankki
|
Verkkopankki
|
||||||
Veröffentlichbarer
|
Veröffentlichbarer
|
||||||
VIP
|
Verwendungszweck-Postfix
|
||||||
|
VIP-Bereiches
|
||||||
|
Warenkorb-ID
|
||||||
|
Warenkorb-Timeout
|
||||||
WebAuthn
|
WebAuthn
|
||||||
|
WebAuthn-Gerät
|
||||||
|
WebAuthn-kompatibler
|
||||||
|
WebAuthn-Token
|
||||||
|
WebAuthn-Unterstützung
|
||||||
Webhook
|
Webhook
|
||||||
Webhooks
|
Webhooks
|
||||||
Weiterleitungs
|
Webhook-Wiederholungsaufträge
|
||||||
WeChat
|
WeChat
|
||||||
|
WeChat-Zahlung
|
||||||
|
Weiterleitungs-URIs
|
||||||
|
Weiterleitungs-URL
|
||||||
|
Weiterleitungs-URLs
|
||||||
WhatsApp
|
WhatsApp
|
||||||
Widget
|
Widget
|
||||||
|
Widget-Code
|
||||||
xlsx
|
xlsx
|
||||||
XXX
|
XXX
|
||||||
XXXX
|
XXXX
|
||||||
XXXXX
|
|
||||||
Yubikey
|
Yubikey
|
||||||
Zahlungs
|
Zahlungs
|
||||||
Zahlungsbestätigungs
|
Zahlungsbestätigungs-E-Mail
|
||||||
Zahlungserinnerungs
|
Zahlungserinnerungs-E-Mail
|
||||||
zahlungspflichtig
|
Zahlungs-ID
|
||||||
Zahlungsplugins
|
Zahlungspflichtig
|
||||||
Zehnerkarten
|
Zehnerkarten
|
||||||
zeitbasiert
|
Zeitbasiert
|
||||||
Zeitslotbuchung
|
Zeitslotbuchung
|
||||||
Zimpler
|
Zimpler
|
||||||
ZIP
|
ZIP-Datei
|
||||||
zubuchbaren
|
zubuchbaren
|
||||||
zurückbuchen
|
|
||||||
zurückgeleitet
|
zurückgeleitet
|
||||||
zurückwechseln
|
zurückwechseln
|
||||||
zutrittsberechtigt
|
zutrittsberechtigt
|
||||||
|
ZVT-Terminal
|
||||||
zzgl
|
zzgl
|
||||||
ZVT
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-05-30 11:07+0000\n"
|
"PO-Revision-Date: 2025-05-30 11:07+0000\n"
|
||||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||||
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
|
||||||
@@ -345,12 +345,12 @@ msgstr "Nein"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "schließen"
|
msgstr "schließen"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "erforderlich"
|
msgstr "erforderlich"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -358,13 +358,13 @@ msgstr ""
|
|||||||
"Deine Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann "
|
"Deine Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann "
|
||||||
"dies einige Minuten dauern."
|
"dies einige Minuten dauern."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Deine Anfrage befindet sich beim Server in der Warteschlange und wird bald "
|
"Deine Anfrage befindet sich beim Server in der Warteschlange und wird bald "
|
||||||
"verarbeitet."
|
"verarbeitet."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -374,14 +374,14 @@ msgstr ""
|
|||||||
"verarbeitet. Wenn dies länger als zwei Minuten dauert, kontaktiere uns bitte "
|
"verarbeitet. Wenn dies länger als zwei Minuten dauert, kontaktiere uns bitte "
|
||||||
"oder gehe in deinem Browser einen Schritt zurück und versuche es erneut."
|
"oder gehe in deinem Browser einen Schritt zurück und versuche es erneut."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Ein Fehler vom Typ {code} ist aufgetreten."
|
msgstr "Ein Fehler vom Typ {code} ist aufgetreten."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -389,12 +389,12 @@ msgstr ""
|
|||||||
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
|
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
|
||||||
"Letzter Fehlercode: {code}"
|
"Letzter Fehlercode: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
|
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -402,11 +402,11 @@ msgstr ""
|
|||||||
"Wir können den Server aktuell nicht erreichen. Bitte versuche es noch "
|
"Wir können den Server aktuell nicht erreichen. Bitte versuche es noch "
|
||||||
"einmal. Fehlercode: {code}"
|
"einmal. Fehlercode: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Wir verarbeiten deine Anfrage …"
|
msgstr "Wir verarbeiten deine Anfrage …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -416,12 +416,12 @@ msgstr ""
|
|||||||
"dauert, prüfe bitte deine Internetverbindung. Danach kannst du diese Seite "
|
"dauert, prüfe bitte deine Internetverbindung. Danach kannst du diese Seite "
|
||||||
"neu laden und es erneut versuchen."
|
"neu laden und es erneut versuchen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn dies länger als einige Minuten dauert, kontaktieren Sie uns bitte."
|
"Wenn dies länger als einige Minuten dauert, kontaktieren Sie uns bitte."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Schließen"
|
msgstr "Schließen"
|
||||||
|
|
||||||
@@ -771,7 +771,7 @@ msgstr "Du erhältst %(currency)s %(amount)s zurück"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "Bitte gib den Betrag ein, den der Veranstalter einbehalten darf."
|
msgstr "Bitte gib den Betrag ein, den der Veranstalter einbehalten darf."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Deine lokale Zeit:"
|
msgstr "Deine lokale Zeit:"
|
||||||
|
|
||||||
|
|||||||
@@ -1,125 +1,143 @@
|
|||||||
2FA
|
ABGEKÜNDIGT
|
||||||
ABN
|
ABN
|
||||||
AES
|
|
||||||
Absenderadresse
|
Absenderadresse
|
||||||
Absenderinformation
|
Absenderinformation
|
||||||
Absendername
|
Absendername
|
||||||
ABGEKÜNDIGT
|
|
||||||
Admin
|
Admin
|
||||||
Adminbereich
|
Adminbereich
|
||||||
|
Admin-Modus
|
||||||
|
Admin-Sitzung
|
||||||
|
Admin-Sitzungen
|
||||||
|
AES
|
||||||
Affirm
|
Affirm
|
||||||
AGPL
|
AGPL
|
||||||
AGPLv
|
AGPLv
|
||||||
Alipay
|
Alipay
|
||||||
and
|
and
|
||||||
|
API-Meta-Informationen
|
||||||
|
APM
|
||||||
App
|
App
|
||||||
|
App-Gebühr
|
||||||
ApplePay
|
ApplePay
|
||||||
Apps
|
Apps
|
||||||
APM
|
|
||||||
as
|
as
|
||||||
Aufbuchungen
|
Aufbuchungen
|
||||||
aufeinanderfolgenden
|
aufeinanderfolgenden
|
||||||
Aufteilungsliste
|
|
||||||
aufzubuchen
|
aufzubuchen
|
||||||
auschecken
|
auschecken
|
||||||
Ausgangsscan
|
Ausgangsscan
|
||||||
Ausgangsscans
|
Ausgangsscans
|
||||||
ausgeklappt
|
|
||||||
ausgecheckt
|
ausgecheckt
|
||||||
|
ausgeklappt
|
||||||
auswahl
|
auswahl
|
||||||
Auth
|
|
||||||
Authentication
|
Authentication
|
||||||
Authenticator
|
Authenticator-App
|
||||||
Authentifizierungsmechanismus
|
|
||||||
Autorisierungs
|
|
||||||
Autorisierungscode
|
Autorisierungscode
|
||||||
Backend
|
Autorisierungs-Endpunktes
|
||||||
Badge
|
Badge
|
||||||
|
Badge-Druck
|
||||||
|
Badge-Layout
|
||||||
|
Badge-Layouts
|
||||||
Badges
|
Badges
|
||||||
Bancontact
|
Bancontact
|
||||||
|
Bank-App
|
||||||
BankID
|
BankID
|
||||||
Banking
|
Banking-App
|
||||||
barcodes
|
|
||||||
Baskisch
|
Baskisch
|
||||||
Bcc
|
Bcc
|
||||||
BCC
|
BCC-Adresse
|
||||||
|
Bcc-Kopie
|
||||||
Beispielevent
|
Beispielevent
|
||||||
Beispielproduktvariantenbeschreibung
|
Beispielproduktvariantenbeschreibung
|
||||||
Belarus
|
Belarus
|
||||||
Benachrichtigungs
|
|
||||||
Benachrichtigungsart
|
Benachrichtigungsart
|
||||||
Benachrichtigungsarten
|
Benachrichtigungsarten
|
||||||
Benachrichtigungseinstellungen
|
Benachrichtigungseinstellungen
|
||||||
Berechtigungs
|
Benachrichtigungs-Einstellungen
|
||||||
Bestätigungs
|
Benachrichtigungs-E-Mail
|
||||||
Bestellbestätigungs
|
Benutzer-ID-Feld
|
||||||
|
Benutzer-ID-Felds
|
||||||
|
Bestätigungs-E-Mail
|
||||||
|
Bestellbestätigungs-E-Mail
|
||||||
|
Bestellbestätigungs-E-Mails
|
||||||
Bestellungsänderungen
|
Bestellungsänderungen
|
||||||
Bestellungsstatus
|
Bestellungs-Synchronisation
|
||||||
Bestellungs
|
Bestellungs-Synchronisierung
|
||||||
bez
|
bez
|
||||||
BezahlCode
|
BezahlCode
|
||||||
Bezahlmethode
|
|
||||||
Blackberry
|
Blackberry
|
||||||
BLIK
|
BLIK
|
||||||
Blogpost
|
BN-Code
|
||||||
BN
|
|
||||||
Branding
|
|
||||||
Browsereinstellungen
|
|
||||||
BSD
|
|
||||||
bspw
|
|
||||||
Bokmål
|
Bokmål
|
||||||
Boleto
|
Boleto
|
||||||
Buchhaltungs
|
Branding-Informationen
|
||||||
|
Browsereinstellungen
|
||||||
|
BSD-Lizenz
|
||||||
|
bspw
|
||||||
Bundles
|
Bundles
|
||||||
Butterfly
|
Butterfly-Badge
|
||||||
bzw
|
bzw
|
||||||
ca
|
ca
|
||||||
Ceuta
|
|
||||||
Cc
|
Cc
|
||||||
|
Ceuta
|
||||||
chardet
|
chardet
|
||||||
charge
|
charge
|
||||||
|
Charge-ID
|
||||||
Checkbox
|
Checkbox
|
||||||
|
Check-in-App
|
||||||
|
Check-in-Apps
|
||||||
|
Check-in-QR-Code
|
||||||
Checkout
|
Checkout
|
||||||
Chrome
|
Chrome
|
||||||
Choice
|
Client-ID
|
||||||
Community
|
Client-Secret
|
||||||
|
CODE.txt
|
||||||
|
Community-Übersetzungen
|
||||||
CONFIRM
|
CONFIRM
|
||||||
Connect
|
Connect
|
||||||
Consent
|
Cookie-Consent-Management
|
||||||
|
Cookie-Consent-Mechanismus
|
||||||
Copyleft
|
Copyleft
|
||||||
Cronjob
|
Cronjob
|
||||||
Cross
|
Cronjob-Komponente
|
||||||
|
Cross-Selling-Bedingung
|
||||||
|
Cross-Selling-Kategorie
|
||||||
|
Cross-Selling-Kategorien
|
||||||
|
Cross-Selling-Schritt
|
||||||
csv
|
csv
|
||||||
|
CSV
|
||||||
|
CSV-Datei
|
||||||
|
CSV-Dateien
|
||||||
|
CSV-Eingabe
|
||||||
|
CSV-Eingabedaten
|
||||||
|
CSV-Import
|
||||||
|
CSV-Input
|
||||||
|
CSV-Lesen
|
||||||
|
CSV-Spalte
|
||||||
Customer
|
Customer
|
||||||
CZK
|
CZK
|
||||||
Dashboard
|
Debug-Modus
|
||||||
Datensynchronisation
|
|
||||||
Debug
|
|
||||||
dekodi
|
dekodi
|
||||||
deliverability
|
Desktop-Apps
|
||||||
DNS
|
|
||||||
Di
|
Di
|
||||||
Do
|
Do
|
||||||
Doe
|
|
||||||
Downloadformat
|
Downloadformat
|
||||||
Downloadseite
|
|
||||||
Dr
|
Dr
|
||||||
Drag
|
Drag-and-Drop-Interfaces
|
||||||
Droid
|
|
||||||
Drop
|
|
||||||
DSS
|
|
||||||
Edge
|
Edge
|
||||||
Eingangsscan
|
Eingangsscan
|
||||||
Einlassbuchung
|
Einlassbuchung
|
||||||
Einlassdatum
|
Einlassdatum
|
||||||
Einlasskontrolle
|
Einlasskontrolle
|
||||||
Einlassuhrzeita
|
|
||||||
einzuchecken
|
einzuchecken
|
||||||
email
|
email
|
||||||
Enterprise
|
E-Mail-Renderer
|
||||||
EPC
|
Enterprise-Lizenz
|
||||||
EPS
|
Enterprise-Lizenzen
|
||||||
|
Enterprise-Plugin
|
||||||
|
Enterprise-Plugins
|
||||||
eps
|
eps
|
||||||
|
EPS
|
||||||
Erstattungsbetrag
|
Erstattungsbetrag
|
||||||
Erstattungsliste
|
Erstattungsliste
|
||||||
Erstattungsmethode
|
Erstattungsmethode
|
||||||
@@ -127,175 +145,231 @@ Erstattungsoptionen
|
|||||||
Erstattungsstatus
|
Erstattungsstatus
|
||||||
Erstattungsweg
|
Erstattungsweg
|
||||||
erstmalig
|
erstmalig
|
||||||
Erweiterungs
|
|
||||||
etc
|
etc
|
||||||
|
EU-USt-ID-Nr
|
||||||
Event
|
Event
|
||||||
|
Event-Eigenschaft
|
||||||
Eventeingang
|
Eventeingang
|
||||||
Eventfirma
|
Event-Erstellung
|
||||||
|
Event-Setup-Tool
|
||||||
|
Event-Ticketing-Software
|
||||||
|
Event-Ticketshop
|
||||||
|
Event-Übersicht
|
||||||
|
Event-Website
|
||||||
evtl
|
evtl
|
||||||
Explorer
|
Explorer
|
||||||
FA
|
FA
|
||||||
Favicon
|
Favicon
|
||||||
|
F-Droid
|
||||||
Footer
|
Footer
|
||||||
|
Footer-Link
|
||||||
|
Footer-Text
|
||||||
Galicisch
|
Galicisch
|
||||||
gehostete
|
Geocoding
|
||||||
geht's
|
Geocoding-Daten
|
||||||
GENEXAMPLE
|
Geo-Koordinaten
|
||||||
Geo
|
Geräte-ID
|
||||||
geocoding
|
|
||||||
gescannt
|
gescannt
|
||||||
ggf
|
ggf
|
||||||
GiroCode
|
Ggf
|
||||||
giropay
|
giropay
|
||||||
GPL
|
|
||||||
Grants
|
Grants
|
||||||
Gruppierungswert
|
|
||||||
Gruppierungsspalte
|
Gruppierungsspalte
|
||||||
|
Gruppierungswert
|
||||||
Guide
|
Guide
|
||||||
Gutscheineinlöser
|
Gutscheineinlöser
|
||||||
|
Händler-ID
|
||||||
|
Händler-PayPal-Konto
|
||||||
|
Hardware-Tokengenerator
|
||||||
herunterscrollen
|
herunterscrollen
|
||||||
hochlädst
|
hochlädst
|
||||||
|
HTML-E-Mail-Renderer
|
||||||
HTTPS
|
HTTPS
|
||||||
IBAN
|
HTTPS-Verbindungen
|
||||||
|
HTTPS-Website
|
||||||
IBANs
|
IBANs
|
||||||
iCal
|
iCal
|
||||||
ics
|
ics-Kalenderdatei
|
||||||
ID
|
ID
|
||||||
iDEAL
|
iDEAL
|
||||||
IDs
|
IDs
|
||||||
Inc
|
Inc
|
||||||
inkl
|
inkl
|
||||||
|
innen-Badges
|
||||||
innenname
|
innenname
|
||||||
innennamen
|
innennamen
|
||||||
innergemeinschaftliche
|
innergemeinschaftliche
|
||||||
Innergemeinschaftlicher
|
Innergemeinschaftlicher
|
||||||
Input
|
Installations-ID
|
||||||
Installations
|
Integrationen
|
||||||
integrationen
|
|
||||||
intra
|
|
||||||
INV
|
|
||||||
invalidieren
|
invalidieren
|
||||||
invalidiert
|
invalidiert
|
||||||
ISU
|
|
||||||
iOS
|
iOS
|
||||||
|
ISU
|
||||||
Itaú
|
Itaú
|
||||||
iTunes
|
iTunes
|
||||||
JavaScript
|
JavaScript
|
||||||
JSON
|
JSON-Datei
|
||||||
Kategoriebeschreibung
|
Kategoriebeschreibung
|
||||||
Key
|
|
||||||
Klarna
|
Klarna
|
||||||
Kombitickets
|
Kombitickets
|
||||||
Kompatibilitätsmodus
|
|
||||||
Konfigurations
|
|
||||||
Kosovo
|
|
||||||
land
|
land
|
||||||
landesspezifische
|
landesspezifische
|
||||||
Lead
|
Lead-Scanning
|
||||||
Leaflet
|
Leaflet-Kacheln
|
||||||
Linktext
|
Linktext
|
||||||
lit
|
lit
|
||||||
|
Log-ID
|
||||||
Logindaten
|
Logindaten
|
||||||
Lösch
|
|
||||||
loszulegen
|
|
||||||
Ltd
|
|
||||||
Macau
|
Macau
|
||||||
|
MapQuest-API-Key
|
||||||
max
|
max
|
||||||
MariaDB
|
Medien-ID
|
||||||
MapQuest
|
|
||||||
Melilla
|
Melilla
|
||||||
Mercado
|
Mercado
|
||||||
Merchandise
|
Merchandise
|
||||||
Meta
|
|
||||||
Metadaten
|
Metadaten
|
||||||
|
Meta-Eigenschaft
|
||||||
|
Meta-Eigenschaften
|
||||||
|
Meta-Informationen
|
||||||
Mi
|
Mi
|
||||||
Mifare
|
Mifare
|
||||||
Mitgliedschafts
|
|
||||||
Mitgliedschaftsdauer
|
|
||||||
min
|
min
|
||||||
|
Mitgliedschaftsdauer
|
||||||
|
Mitgliedschafts-Typ
|
||||||
|
Mitgliedschafts-Typen
|
||||||
Mo
|
Mo
|
||||||
MobilePay
|
MobilePay
|
||||||
MOTO
|
MOTO
|
||||||
|
MOTO-Zahlungen
|
||||||
Multibanco
|
Multibanco
|
||||||
|
Multiple-Choice-Fragen
|
||||||
MwSt
|
MwSt
|
||||||
MyBank
|
MyBank
|
||||||
name
|
name
|
||||||
NFC
|
NFC
|
||||||
|
NFC-basierte
|
||||||
|
NFC-Chip
|
||||||
|
NFC-Chips
|
||||||
|
NFC-Medien
|
||||||
|
NFC-Zahlungsmitteln
|
||||||
Nr
|
Nr
|
||||||
NREI
|
NREI
|
||||||
number
|
number
|
||||||
NXP
|
NXP
|
||||||
|
Objekt-IDs
|
||||||
|
Offline-Scan
|
||||||
OK
|
OK
|
||||||
On
|
Online-Banking
|
||||||
Onlinebanking
|
Onlinebanking-Zugangsdaten
|
||||||
Open
|
Open
|
||||||
OpenCage
|
OpenCage-API-Key
|
||||||
OpenID
|
OpenID
|
||||||
OpenStreetMap
|
OpenStreetMap
|
||||||
Opera
|
Opera
|
||||||
Output
|
|
||||||
OXXO
|
OXXO
|
||||||
parsen
|
|
||||||
Pago
|
Pago
|
||||||
|
parsen
|
||||||
Pay
|
Pay
|
||||||
PayPal
|
PayPal
|
||||||
PayPals
|
PayPal-Account
|
||||||
|
PayPal-Accounts
|
||||||
|
PayPal-Konto
|
||||||
|
PayPal-Kontos
|
||||||
|
PayPal-Sandbox
|
||||||
|
PayPal-Sandbox-Account
|
||||||
|
PayPal-Seite
|
||||||
|
PayPal-Verkaufs-ID
|
||||||
|
PayPal-Webhook
|
||||||
|
PayPal-Zahlung
|
||||||
|
PayPal-Zahlungen
|
||||||
|
PayPal-Zahlungs-ID
|
||||||
PayU
|
PayU
|
||||||
PCI
|
PCI-DSS-Formulare
|
||||||
|
Peppol-Netzwerk
|
||||||
|
Peppol-Teilnehmer-ID
|
||||||
|
Peppol-Teilnehmer-IDs
|
||||||
Personalisierung
|
Personalisierung
|
||||||
PEPPOL
|
PKCE-Erweiterung
|
||||||
PKCE
|
|
||||||
Platzhalterzeichen
|
Platzhalterzeichen
|
||||||
Play
|
Play
|
||||||
Plugin
|
Plugin
|
||||||
Plugins
|
Plugins
|
||||||
POS
|
|
||||||
Postfix
|
Postfix
|
||||||
PostgreSQL
|
|
||||||
PPRO
|
PPRO
|
||||||
prefix
|
prefix
|
||||||
|
Prefix
|
||||||
pretix
|
pretix
|
||||||
pretixdesk
|
pretix-Apps
|
||||||
|
pretix-Benutzerkennung
|
||||||
|
pretixdesk-Apps
|
||||||
pretixdroid
|
pretixdroid
|
||||||
pretixPOS
|
pretix-Enterprise-Lizenz
|
||||||
|
pretix-Enterprise-Plugins
|
||||||
|
pretix-Entwickler
|
||||||
|
pretix-Entwicklern
|
||||||
|
pretix-Feld
|
||||||
|
pretix-Installation
|
||||||
|
pretix-Konto
|
||||||
|
pretix-Kontos
|
||||||
|
pretix-Logo
|
||||||
|
pretix-Logos
|
||||||
|
pretix-Plugins
|
||||||
pretixPRINT
|
pretixPRINT
|
||||||
|
pretixPRINT-Version
|
||||||
pretixSCAN
|
pretixSCAN
|
||||||
Professional
|
pretix-Support
|
||||||
|
pretix-Team
|
||||||
|
pretix-Update
|
||||||
|
pretix-Version
|
||||||
|
pretix-Versionen
|
||||||
|
pretix-Widget
|
||||||
|
Produkt-ID
|
||||||
|
Produkt-Metadaten
|
||||||
Przelewy
|
Przelewy
|
||||||
pt
|
pt
|
||||||
px
|
px
|
||||||
Query
|
QR-Code
|
||||||
QR
|
QR-Code-Bereich
|
||||||
|
QR-Code-Geheimnis
|
||||||
|
QR-Code-Inhalt
|
||||||
|
QR-Code-Reader
|
||||||
|
QR-Codes
|
||||||
|
QR-Farbe
|
||||||
|
Query-Parameter
|
||||||
rabattiert
|
rabattiert
|
||||||
|
Rabattiert
|
||||||
Rabattierung
|
Rabattierung
|
||||||
Reader
|
Rechnungs-E-Mail
|
||||||
Rechnungs
|
|
||||||
Rechungsdatei
|
Rechungsdatei
|
||||||
Reddit
|
Reddit
|
||||||
Referer
|
Referer
|
||||||
Registrierungs
|
|
||||||
Registrierungsdatum
|
Registrierungsdatum
|
||||||
|
Registrierungs-Details
|
||||||
Registrierungsnummer
|
Registrierungsnummer
|
||||||
Registrierungsversuche
|
Registrierungsversuche
|
||||||
remote
|
remote
|
||||||
Renderer
|
|
||||||
Request
|
Request
|
||||||
Requests
|
Requests
|
||||||
|
Request-URL
|
||||||
Reservierungszeitraum
|
Reservierungszeitraum
|
||||||
reverse
|
reverse
|
||||||
|
Reverse
|
||||||
|
Reverse-Proxy
|
||||||
Revisionssicherheit
|
Revisionssicherheit
|
||||||
Revolut
|
Revolut
|
||||||
|
Revolut-App
|
||||||
rückabgewickelt
|
rückabgewickelt
|
||||||
Rundungsdifferenzen
|
|
||||||
Sa
|
Sa
|
||||||
Saalplan
|
|
||||||
Sammlungsstücken
|
Sammlungsstücken
|
||||||
SAQ
|
SAQ
|
||||||
SCA
|
SCA
|
||||||
Scan
|
Scan
|
||||||
|
Scanning-Apps
|
||||||
Scans
|
Scans
|
||||||
Scanergebnis
|
Scan-Terminals
|
||||||
Scanning
|
Scan-Typ
|
||||||
|
Scan-Zeitpunkt
|
||||||
schiefgeht
|
schiefgeht
|
||||||
schiefgelaufen
|
schiefgelaufen
|
||||||
Scope
|
Scope
|
||||||
@@ -304,23 +378,37 @@ SdI
|
|||||||
sechsstelligen
|
sechsstelligen
|
||||||
Secret
|
Secret
|
||||||
Security
|
Security
|
||||||
Selling
|
selbst-gehostete
|
||||||
SEPA
|
SEPA-Bankeinzug
|
||||||
Shirts
|
SEPA-Bankkonto
|
||||||
|
SEPA-Konten
|
||||||
|
SEPA-Lastschrift
|
||||||
|
SEPA-Lastschriften
|
||||||
|
SEPA-Mandat
|
||||||
|
SEPA-XML
|
||||||
|
Session-ID
|
||||||
Signaturverfahren
|
Signaturverfahren
|
||||||
Sign
|
Single-Sign-On
|
||||||
|
Single-Sign-On-Dienste
|
||||||
|
Single-Sign-On-Methode
|
||||||
|
Single-Sign-On-Provider
|
||||||
Sitzplanmoduls
|
Sitzplanmoduls
|
||||||
Social
|
Sitzplatz-ID
|
||||||
Sofort
|
Sitzplatz-IDs
|
||||||
SOFORT
|
Social-Media-Bild
|
||||||
Sorry
|
Sorry
|
||||||
Source
|
Source
|
||||||
SPF
|
Source-Codes
|
||||||
|
SPF-Eintrag
|
||||||
SSL
|
SSL
|
||||||
SSO
|
SSO
|
||||||
|
SSO-Client
|
||||||
|
SSO-Clients
|
||||||
|
SSO-Provider
|
||||||
STARTTLS
|
STARTTLS
|
||||||
|
Steuer-Aufteilungsliste
|
||||||
|
Steuerregel-ID
|
||||||
Steuerschuldnerschaft
|
Steuerschuldnerschaft
|
||||||
Store
|
|
||||||
Stornierungsanfrage
|
Stornierungsanfrage
|
||||||
Stornobedingungen
|
Stornobedingungen
|
||||||
Stornobeleg
|
Stornobeleg
|
||||||
@@ -330,58 +418,75 @@ Stornogebühren
|
|||||||
Stornos
|
Stornos
|
||||||
Strg
|
Strg
|
||||||
Stripe
|
Stripe
|
||||||
Stripes
|
Stripe-Account
|
||||||
|
Stripe-App
|
||||||
|
Stripe-Dashboard
|
||||||
|
Stripe-Konto
|
||||||
|
Stripe-Kontos
|
||||||
|
Stripe-Modul
|
||||||
|
Stripe-Support
|
||||||
|
Stripe-Test-API
|
||||||
Strong
|
Strong
|
||||||
Swish
|
Swish
|
||||||
Synchronisations
|
|
||||||
systemweiten
|
systemweiten
|
||||||
Tab
|
Tab
|
||||||
tag
|
tag
|
||||||
Teammitglied
|
Teammitglied
|
||||||
Teamname
|
Teamname
|
||||||
|
Teilnehmer-Badges
|
||||||
Telephone
|
Telephone
|
||||||
|
Terminal-ID
|
||||||
|
Termin-ID
|
||||||
Ticketing
|
Ticketing
|
||||||
Timeout
|
Ticketing-Firma
|
||||||
To
|
Ticket-Output
|
||||||
Tokengenerator
|
Ticket-QR-Code
|
||||||
Toolbar
|
|
||||||
TODO
|
TODO
|
||||||
|
To-Do-Liste
|
||||||
TOTP
|
TOTP
|
||||||
Trace
|
Trace-Nummer
|
||||||
Tracking
|
Tracking
|
||||||
transaktionale
|
transaktionale
|
||||||
Trustly
|
Trustly
|
||||||
Turnover
|
T-Shirts
|
||||||
|
Turnover-Nummer
|
||||||
TWINT
|
TWINT
|
||||||
txt
|
|
||||||
überbuchen
|
überbuchen
|
||||||
überbucht
|
überbucht
|
||||||
überbuchten
|
überbuchten
|
||||||
überzahlt
|
überzahlt
|
||||||
|
Überzahlt
|
||||||
ÜBERZAHLT
|
ÜBERZAHLT
|
||||||
überzahlte
|
überzahlte
|
||||||
|
Überzahlte
|
||||||
|
Überzahlten
|
||||||
uhrzeit
|
uhrzeit
|
||||||
UID
|
UID
|
||||||
|
UID-Basis
|
||||||
|
UID-Schutzfunktion
|
||||||
Ultralight
|
Ultralight
|
||||||
|
umzubuchen
|
||||||
ungespeicherte
|
ungespeicherte
|
||||||
unkategorisiert
|
Unkategorisiert
|
||||||
Unkategorisierte
|
Unkategorisierte
|
||||||
unlöschbar
|
unlöschbar
|
||||||
unlöschbaren
|
unlöschbaren
|
||||||
untenstehende
|
untenstehende
|
||||||
untenstehenden
|
untenstehenden
|
||||||
unterzahlt
|
Unterzahlt
|
||||||
UNTERZAHLT
|
UNTERZAHLT
|
||||||
unzugeordnete
|
unzugeordnete
|
||||||
|
Unzugeordnete
|
||||||
unzugeordneten
|
unzugeordneten
|
||||||
umzubuchen
|
|
||||||
URIs
|
URIs
|
||||||
Ursprüngl
|
Ursprüngl
|
||||||
USt
|
USt
|
||||||
Überweisungs
|
USt-ID
|
||||||
Überzahlten
|
USt-ID-Nr
|
||||||
|
USt-ID-Nummer
|
||||||
Validierung
|
Validierung
|
||||||
Validierungsregeln
|
Validierungsregeln
|
||||||
|
Varianten-ID
|
||||||
Venmo
|
Venmo
|
||||||
Veranstalterdomain
|
Veranstalterdomain
|
||||||
Veranstaltereinstellungen
|
Veranstaltereinstellungen
|
||||||
@@ -394,39 +499,50 @@ Veranstalterseite
|
|||||||
Veranstalterübersicht
|
Veranstalterübersicht
|
||||||
veranstalterweiten
|
veranstalterweiten
|
||||||
Veranstaltungs
|
Veranstaltungs
|
||||||
Veranstalterdomain
|
Veranstaltungs-Metadaten
|
||||||
veranstaltungsweiten
|
veranstaltungsweiten
|
||||||
Verfügbarkeitsberechnung
|
Verfügbarkeitsberechnung
|
||||||
Verfügbarkeitsstatus
|
Verfügbarkeitsstatus
|
||||||
|
Verkaufs-ID
|
||||||
Verkkopankki
|
Verkkopankki
|
||||||
Veröffentlichbarer
|
Veröffentlichbarer
|
||||||
VIP
|
Verwendungszweck-Postfix
|
||||||
|
VIP-Bereiches
|
||||||
|
Warenkorb-ID
|
||||||
|
Warenkorb-Timeout
|
||||||
WebAuthn
|
WebAuthn
|
||||||
|
WebAuthn-Gerät
|
||||||
|
WebAuthn-kompatibler
|
||||||
|
WebAuthn-Token
|
||||||
|
WebAuthn-Unterstützung
|
||||||
Webhook
|
Webhook
|
||||||
Webhooks
|
Webhooks
|
||||||
Weiterleitungs
|
Webhook-Wiederholungsaufträge
|
||||||
WeChat
|
WeChat
|
||||||
|
WeChat-Zahlung
|
||||||
|
Weiterleitungs-URIs
|
||||||
|
Weiterleitungs-URL
|
||||||
|
Weiterleitungs-URLs
|
||||||
WhatsApp
|
WhatsApp
|
||||||
Widget
|
Widget
|
||||||
|
Widget-Code
|
||||||
xlsx
|
xlsx
|
||||||
XXX
|
XXX
|
||||||
XXXX
|
XXXX
|
||||||
XXXXX
|
|
||||||
Yubikey
|
Yubikey
|
||||||
Zahlungs
|
Zahlungs
|
||||||
Zahlungsbestätigungs
|
Zahlungsbestätigungs-E-Mail
|
||||||
Zahlungserinnerungs
|
Zahlungserinnerungs-E-Mail
|
||||||
zahlungspflichtig
|
Zahlungs-ID
|
||||||
Zahlungsplugins
|
Zahlungspflichtig
|
||||||
Zehnerkarten
|
Zehnerkarten
|
||||||
zeitbasiert
|
Zeitbasiert
|
||||||
Zeitslotbuchung
|
Zeitslotbuchung
|
||||||
Zimpler
|
Zimpler
|
||||||
ZIP
|
ZIP-Datei
|
||||||
zubuchbaren
|
zubuchbaren
|
||||||
zurückbuchen
|
|
||||||
zurückgeleitet
|
zurückgeleitet
|
||||||
zurückwechseln
|
zurückwechseln
|
||||||
zutrittsberechtigt
|
zutrittsberechtigt
|
||||||
|
ZVT-Terminal
|
||||||
zzgl
|
zzgl
|
||||||
ZVT
|
|
||||||
|
|||||||
+971
-921
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:36+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2024-12-22 00:00+0000\n"
|
"PO-Revision-Date: 2024-12-22 00:00+0000\n"
|
||||||
"Last-Translator: Dimitris Tsimpidis <tsimpidisd@gmail.com>\n"
|
"Last-Translator: Dimitris Tsimpidis <tsimpidisd@gmail.com>\n"
|
||||||
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -361,14 +361,14 @@ msgstr "Όχι"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "Κλείσιμο"
|
msgstr "Κλείσιμο"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cart expired"
|
#| msgid "Cart expired"
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "Το καλάθι έληξε"
|
msgstr "Το καλάθι έληξε"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid ""
|
#| msgid ""
|
||||||
#| "Your request has been queued on the server and will now be processed. "
|
#| "Your request has been queued on the server and will now be processed. "
|
||||||
@@ -381,7 +381,7 @@ msgstr ""
|
|||||||
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
|
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
|
||||||
"διαρκέσει μερικά λεπτά."
|
"διαρκέσει μερικά λεπτά."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid ""
|
#| msgid ""
|
||||||
#| "Your request has been queued on the server and will now be processed. "
|
#| "Your request has been queued on the server and will now be processed. "
|
||||||
@@ -392,7 +392,7 @@ msgstr ""
|
|||||||
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
|
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
|
||||||
"διαρκέσει μερικά λεπτά."
|
"διαρκέσει μερικά λεπτά."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -402,14 +402,14 @@ msgstr ""
|
|||||||
"του. Αν αυτό διαρκεί περισσότερο από δύο λεπτά, επικοινωνήστε μαζί μας ή "
|
"του. Αν αυτό διαρκεί περισσότερο από δύο λεπτά, επικοινωνήστε μαζί μας ή "
|
||||||
"επιστρέψτε στο πρόγραμμα περιήγησής σας και δοκιμάστε ξανά."
|
"επιστρέψτε στο πρόγραμμα περιήγησής σας και δοκιμάστε ξανά."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Παρουσιάστηκε σφάλμα τύπου {code}."
|
msgstr "Παρουσιάστηκε σφάλμα τύπου {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -417,14 +417,14 @@ msgstr ""
|
|||||||
"Αυτήν τη στιγμή δεν μπορούμε να φτάσουμε στο διακομιστή, αλλά συνεχίζουμε να "
|
"Αυτήν τη στιγμή δεν μπορούμε να φτάσουμε στο διακομιστή, αλλά συνεχίζουμε να "
|
||||||
"προσπαθούμε. Τελευταίος κωδικός σφάλματος: {code}"
|
"προσπαθούμε. Τελευταίος κωδικός σφάλματος: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "The request took to long. Please try again."
|
#| msgid "The request took to long. Please try again."
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Το αίτημα διήρκησε πολύ. Παρακαλώ προσπαθήστε ξανά."
|
msgstr "Το αίτημα διήρκησε πολύ. Παρακαλώ προσπαθήστε ξανά."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -432,11 +432,11 @@ msgstr ""
|
|||||||
"Αυτήν τη στιγμή δεν μπορούμε να συνδεθούμε με το διακομιστή. Παρακαλώ "
|
"Αυτήν τη στιγμή δεν μπορούμε να συνδεθούμε με το διακομιστή. Παρακαλώ "
|
||||||
"προσπαθήστε ξανά. Κωδικός σφάλματος: {code}"
|
"προσπαθήστε ξανά. Κωδικός σφάλματος: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Επεξεργαζόμαστε το αίτημά σας …"
|
msgstr "Επεξεργαζόμαστε το αίτημά σας …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -446,11 +446,11 @@ msgstr ""
|
|||||||
"περισσότερο από ένα λεπτό, ελέγξτε τη σύνδεσή σας στο διαδίκτυο και στη "
|
"περισσότερο από ένα λεπτό, ελέγξτε τη σύνδεσή σας στο διαδίκτυο και στη "
|
||||||
"συνέχεια επαναλάβετε τη φόρτωση αυτής της σελίδας και δοκιμάστε ξανά."
|
"συνέχεια επαναλάβετε τη φόρτωση αυτής της σελίδας και δοκιμάστε ξανά."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Κλείσιμο μηνύματος"
|
msgstr "Κλείσιμο μηνύματος"
|
||||||
|
|
||||||
@@ -820,7 +820,7 @@ msgstr "απο %(currency)s %(price)s"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+1340
-1425
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -345,12 +345,12 @@ msgstr "No"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "cerrar"
|
msgstr "cerrar"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "campo requerido"
|
msgstr "campo requerido"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -358,11 +358,11 @@ msgstr ""
|
|||||||
"Su solicitud está siendo procesada. Esto puede tardar varios minutos, "
|
"Su solicitud está siendo procesada. Esto puede tardar varios minutos, "
|
||||||
"dependiendo del tamaño de su evento."
|
"dependiendo del tamaño de su evento."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr "Su solicitud ha sido enviada al servidor y será procesada en breve."
|
msgstr "Su solicitud ha sido enviada al servidor y será procesada en breve."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -372,14 +372,14 @@ msgstr ""
|
|||||||
"Si toma más de dos minutos, por favor contáctenos o regrese a la página "
|
"Si toma más de dos minutos, por favor contáctenos o regrese a la página "
|
||||||
"anterior en su navegador e intente de nuevo."
|
"anterior en su navegador e intente de nuevo."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Ha ocurrido un error de tipo {code}."
|
msgstr "Ha ocurrido un error de tipo {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -387,12 +387,12 @@ msgstr ""
|
|||||||
"Ahora mismo no podemos contactar con el servidor, pero lo seguimos "
|
"Ahora mismo no podemos contactar con el servidor, pero lo seguimos "
|
||||||
"intentando. El último código de error fue: {code}"
|
"intentando. El último código de error fue: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "La solicitud ha tomado demasiado tiempo. Por favor, intente de nuevo."
|
msgstr "La solicitud ha tomado demasiado tiempo. Por favor, intente de nuevo."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -400,11 +400,11 @@ msgstr ""
|
|||||||
"Ahora mismo no podemos contactar con el servidor. Por favor, intente de "
|
"Ahora mismo no podemos contactar con el servidor. Por favor, intente de "
|
||||||
"nuevo. Código de error: {code}"
|
"nuevo. Código de error: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Estamos procesando su solicitud…"
|
msgstr "Estamos procesando su solicitud…"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -414,11 +414,11 @@ msgstr ""
|
|||||||
"minuto, por favor, revise su conexión a Internet, recargue la página e "
|
"minuto, por favor, revise su conexión a Internet, recargue la página e "
|
||||||
"intente nuevamente."
|
"intente nuevamente."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr "Si tarda más de unos minutos, póngase en contacto con nosotros."
|
msgstr "Si tarda más de unos minutos, póngase en contacto con nosotros."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Cerrar mensaje"
|
msgstr "Cerrar mensaje"
|
||||||
|
|
||||||
@@ -768,7 +768,7 @@ msgstr "Obtienes %(currency)s %(price)s de vuelta"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "Por favor, ingrese el importe que el organizador puede quedarse."
|
msgstr "Por favor, ingrese el importe que el organizador puede quedarse."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Su hora local:"
|
msgstr "Su hora local:"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-08-04 14:16+0200\n"
|
"PO-Revision-Date: 2025-08-04 14:16+0200\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
@@ -345,68 +345,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -741,7 +741,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
|
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
|
||||||
"Last-Translator: Albizuri <oier@puntu.eus>\n"
|
"Last-Translator: Albizuri <oier@puntu.eus>\n"
|
||||||
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
@@ -345,12 +345,12 @@ msgstr "Ez"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "itxi"
|
msgstr "itxi"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -358,11 +358,11 @@ msgstr ""
|
|||||||
"Zure eskaera prozesatzen ari dira. Gertaeraren tamainaren arabera, baliteke "
|
"Zure eskaera prozesatzen ari dira. Gertaeraren tamainaren arabera, baliteke "
|
||||||
"minutu batzuk behar izatea."
|
"minutu batzuk behar izatea."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr "Zure eskaera zerbitzarian gorde da eta laster prozesatuko da."
|
msgstr "Zure eskaera zerbitzarian gorde da eta laster prozesatuko da."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -372,14 +372,14 @@ msgstr ""
|
|||||||
"Bi minutu baino gehiago irauten badu, mesedez, jarri gurekin harremanetan "
|
"Bi minutu baino gehiago irauten badu, mesedez, jarri gurekin harremanetan "
|
||||||
"edo itzuli zure nabigatzailera eta saiatu berriro."
|
"edo itzuli zure nabigatzailera eta saiatu berriro."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "{kode} motako errore bat gertatu da."
|
msgstr "{kode} motako errore bat gertatu da."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -387,12 +387,12 @@ msgstr ""
|
|||||||
"Orain bertan ezin gara zerbitzarira iritsi, baina saiatzen jarraitzen dugu. "
|
"Orain bertan ezin gara zerbitzarira iritsi, baina saiatzen jarraitzen dugu. "
|
||||||
"Azken errore-kodea: {kodea}"
|
"Azken errore-kodea: {kodea}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Gehiegi luzatu da eskaera. Mesedez, saiatu berriro."
|
msgstr "Gehiegi luzatu da eskaera. Mesedez, saiatu berriro."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -400,11 +400,11 @@ msgstr ""
|
|||||||
"Une honetan ezin gara zerbitzarira iritsi. Mesedez, saiatu berriro. Errore-"
|
"Une honetan ezin gara zerbitzarira iritsi. Mesedez, saiatu berriro. Errore-"
|
||||||
"kodea: {kodea}"
|
"kodea: {kodea}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Zure eskaera prozesatzen ari gara …"
|
msgstr "Zure eskaera prozesatzen ari gara …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -414,11 +414,11 @@ msgstr ""
|
|||||||
"baino gehiago irauten badu, mesedez, berrikusi zure Interneteko konexioa eta "
|
"baino gehiago irauten badu, mesedez, berrikusi zure Interneteko konexioa eta "
|
||||||
"gero kargatu berriro orri hau eta saiatu berriro."
|
"gero kargatu berriro orri hau eta saiatu berriro."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Mezua itxi"
|
msgstr "Mezua itxi"
|
||||||
|
|
||||||
@@ -766,7 +766,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
|
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
|
||||||
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
|
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
|
||||||
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -363,49 +363,49 @@ msgstr "Ei"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "Sulje"
|
msgstr "Sulje"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cart expired"
|
#| msgid "Cart expired"
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "Ostoskori on vanhentunut"
|
msgstr "Ostoskori on vanhentunut"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Tapahtui virhe. Virhekoodi: {code}."
|
msgstr "Tapahtui virhe. Virhekoodi: {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "Pyyntö aikakatkaistiin. Ole hyvä ja yritä uudelleen."
|
msgstr "Pyyntö aikakatkaistiin. Ole hyvä ja yritä uudelleen."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -413,22 +413,22 @@ msgstr ""
|
|||||||
"Palvelimeen ei juuri nyt saatu yhteyttä. Ole hyvä ja yritä uudelleen. "
|
"Palvelimeen ei juuri nyt saatu yhteyttä. Ole hyvä ja yritä uudelleen. "
|
||||||
"Virhekoodi: {code}"
|
"Virhekoodi: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Pyyntöäsi käsitellään …"
|
msgstr "Pyyntöäsi käsitellään …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Sulje viesti"
|
msgstr "Sulje viesti"
|
||||||
|
|
||||||
@@ -783,7 +783,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -344,68 +344,68 @@ msgstr ""
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
"browser and try again."
|
"browser and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
"page and try again."
|
"page and try again."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -740,7 +740,7 @@ msgstr ""
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
+1346
-1430
File diff suppressed because it is too large
Load Diff
@@ -6,8 +6,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: French\n"
|
"Project-Id-Version: French\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2025-05-30 11:06+0000\n"
|
"PO-Revision-Date: 2025-08-28 23:00+0000\n"
|
||||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||||
"fr/>\n"
|
"fr/>\n"
|
||||||
@@ -16,7 +16,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 5.11.4\n"
|
"X-Generator: Weblate 5.13\n"
|
||||||
|
|
||||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||||
@@ -344,12 +344,12 @@ msgstr "Non"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "fermer"
|
msgstr "fermer"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "obligatoire"
|
msgstr "obligatoire"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -357,13 +357,13 @@ msgstr ""
|
|||||||
"Votre demande est maintenant en cours de traitement. Selon la taille de "
|
"Votre demande est maintenant en cours de traitement. Selon la taille de "
|
||||||
"votre événement, cela peut prendre jusqu' à quelques minutes."
|
"votre événement, cela peut prendre jusqu' à quelques minutes."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Votre demande a été mise en attente sur le serveur et sera traitée "
|
"Votre demande a été mise en attente sur le serveur et sera traitée "
|
||||||
"prochainement."
|
"prochainement."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -373,14 +373,14 @@ msgstr ""
|
|||||||
"prend plus de deux minutes, veuillez nous contacter ou retourner dans votre "
|
"prend plus de deux minutes, veuillez nous contacter ou retourner dans votre "
|
||||||
"navigateur et réessayer."
|
"navigateur et réessayer."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Une erreur de type {code} s'est produite."
|
msgstr "Une erreur de type {code} s'est produite."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -388,12 +388,12 @@ msgstr ""
|
|||||||
"Nous ne pouvons actuellement pas atteindre le serveur, mais nous continuons "
|
"Nous ne pouvons actuellement pas atteindre le serveur, mais nous continuons "
|
||||||
"d'essayer. Dernier code d'erreur : {code}"
|
"d'essayer. Dernier code d'erreur : {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "La requête a prit trop de temps. Veuillez réessayer."
|
msgstr "La requête a prit trop de temps. Veuillez réessayer."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -401,11 +401,11 @@ msgstr ""
|
|||||||
"Actuellement, nous ne pouvons pas atteindre le serveur. Veuillez réessayer. "
|
"Actuellement, nous ne pouvons pas atteindre le serveur. Veuillez réessayer. "
|
||||||
"Code d'erreur : {code}"
|
"Code d'erreur : {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Nous traitons votre demande …"
|
msgstr "Nous traitons votre demande …"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -415,11 +415,11 @@ msgstr ""
|
|||||||
"d'une minute, veuillez vérifier votre connexion Internet, puis recharger "
|
"d'une minute, veuillez vérifier votre connexion Internet, puis recharger "
|
||||||
"cette page et réessayer."
|
"cette page et réessayer."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr "Si cela prend plus de quelques minutes, veuillez nous contacter."
|
msgstr "Si cela prend plus de quelques minutes, veuillez nous contacter."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Fermer le message"
|
msgstr "Fermer le message"
|
||||||
|
|
||||||
@@ -551,7 +551,7 @@ msgstr "minutes"
|
|||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
|
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
|
||||||
msgid "Duplicate"
|
msgid "Duplicate"
|
||||||
msgstr "Doublon"
|
msgstr "Dupliquer"
|
||||||
|
|
||||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
|
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
|
||||||
msgctxt "entry_status"
|
msgctxt "entry_status"
|
||||||
@@ -768,7 +768,7 @@ msgid "Please enter the amount the organizer can keep."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Veuillez indiquer le montant que l'organisateur est autorisé à retenir."
|
"Veuillez indiquer le montant que l'organisateur est autorisé à retenir."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "Votre heure locale :"
|
msgstr "Votre heure locale :"
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
|
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
|
||||||
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
|
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
|
||||||
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
|
||||||
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
|
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||||
@@ -351,12 +351,12 @@ msgstr "Non"
|
|||||||
msgid "close"
|
msgid "close"
|
||||||
msgstr "cerrar"
|
msgstr "cerrar"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/addressform.js:105
|
#: pretix/static/pretixbase/js/addressform.js:90
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:509
|
#: pretix/static/pretixpresale/js/ui/main.js:519
|
||||||
msgid "required"
|
msgid "required"
|
||||||
msgstr "campo requirido"
|
msgstr "campo requirido"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request is currently being processed. Depending on the size of your "
|
"Your request is currently being processed. Depending on the size of your "
|
||||||
"event, this might take up to a few minutes."
|
"event, this might take up to a few minutes."
|
||||||
@@ -364,11 +364,11 @@ msgstr ""
|
|||||||
"A súa solicitude estase procesando. Isto pode tardar varios minutos, "
|
"A súa solicitude estase procesando. Isto pode tardar varios minutos, "
|
||||||
"dependendo do tamaño do seu evento."
|
"dependendo do tamaño do seu evento."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:16
|
#: pretix/static/pretixbase/js/asynctask.js:17
|
||||||
msgid "Your request has been queued on the server and will soon be processed."
|
msgid "Your request has been queued on the server and will soon be processed."
|
||||||
msgstr "A súa solicitude foi enviada ao servidor e será procesada en breve."
|
msgstr "A súa solicitude foi enviada ao servidor e será procesada en breve."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:20
|
#: pretix/static/pretixbase/js/asynctask.js:21
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your request arrived on the server but we still wait for it to be processed. "
|
"Your request arrived on the server but we still wait for it to be processed. "
|
||||||
"If this takes longer than two minutes, please contact us or go back in your "
|
"If this takes longer than two minutes, please contact us or go back in your "
|
||||||
@@ -378,14 +378,14 @@ msgstr ""
|
|||||||
"procesada. Se tarda máis de dous minutos, por favor, contacte con nós ou "
|
"procesada. Se tarda máis de dous minutos, por favor, contacte con nós ou "
|
||||||
"volva á páxina anterior no seu navegador e inténteo de novo."
|
"volva á páxina anterior no seu navegador e inténteo de novo."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:119
|
#: pretix/static/pretixbase/js/asynctask.js:125
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:176
|
#: pretix/static/pretixbase/js/asynctask.js:182
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:180
|
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||||
msgid "An error of type {code} occurred."
|
msgid "An error of type {code} occurred."
|
||||||
msgstr "Ocurreu un error de tipo {code}."
|
msgstr "Ocurreu un error de tipo {code}."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:122
|
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||||
"{code}"
|
"{code}"
|
||||||
@@ -393,12 +393,12 @@ msgstr ""
|
|||||||
"Agora mesmo non podemos contactar co servidor, pero seguímolo intentando. O "
|
"Agora mesmo non podemos contactar co servidor, pero seguímolo intentando. O "
|
||||||
"último código de erro foi: {code}"
|
"último código de erro foi: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:156
|
#: pretix/static/pretixbase/js/asynctask.js:162
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
#: pretix/static/pretixcontrol/js/ui/mail.js:21
|
||||||
msgid "The request took too long. Please try again."
|
msgid "The request took too long. Please try again."
|
||||||
msgstr "A petición levou demasiado tempo. Inténteo de novo."
|
msgstr "A petición levou demasiado tempo. Inténteo de novo."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:182
|
#: pretix/static/pretixbase/js/asynctask.js:188
|
||||||
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
#: pretix/static/pretixcontrol/js/ui/mail.js:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||||
@@ -406,11 +406,11 @@ msgstr ""
|
|||||||
"Agora mesmo non podemos contactar co servidor. Por favor, inténteo de novo. "
|
"Agora mesmo non podemos contactar co servidor. Por favor, inténteo de novo. "
|
||||||
"Código de erro: {code}"
|
"Código de erro: {code}"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:210
|
#: pretix/static/pretixbase/js/asynctask.js:216
|
||||||
msgid "We are processing your request …"
|
msgid "We are processing your request …"
|
||||||
msgstr "Estamos procesando a súa solicitude…"
|
msgstr "Estamos procesando a súa solicitude…"
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:213
|
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||||
msgid ""
|
msgid ""
|
||||||
"We are currently sending your request to the server. If this takes longer "
|
"We are currently sending your request to the server. If this takes longer "
|
||||||
"than one minute, please check your internet connection and then reload this "
|
"than one minute, please check your internet connection and then reload this "
|
||||||
@@ -420,11 +420,11 @@ msgstr ""
|
|||||||
"dun minuto, por favor, revise a súa conexión a Internet, recargue a páxina e "
|
"dun minuto, por favor, revise a súa conexión a Internet, recargue a páxina e "
|
||||||
"inténteo de novo."
|
"inténteo de novo."
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
#: pretix/static/pretixbase/js/asynctask.js:276
|
||||||
msgid "If this takes longer than a few minutes, please contact us."
|
msgid "If this takes longer than a few minutes, please contact us."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
#: pretix/static/pretixbase/js/asynctask.js:331
|
||||||
msgid "Close message"
|
msgid "Close message"
|
||||||
msgstr "Cerrar mensaxe"
|
msgstr "Cerrar mensaxe"
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ msgstr "Obtés %(currency)s %(price)s de volta"
|
|||||||
msgid "Please enter the amount the organizer can keep."
|
msgid "Please enter the amount the organizer can keep."
|
||||||
msgstr "Por favor, ingrese a cantidade que pode conservar o organizador."
|
msgstr "Por favor, ingrese a cantidade que pode conservar o organizador."
|
||||||
|
|
||||||
#: pretix/static/pretixpresale/js/ui/main.js:554
|
#: pretix/static/pretixpresale/js/ui/main.js:564
|
||||||
msgid "Your local time:"
|
msgid "Your local time:"
|
||||||
msgstr "A súa hora local:"
|
msgstr "A súa hora local:"
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user