Compare commits

..

22 Commits

Author SHA1 Message Date
Raphael Michel
5af7e1b6d6 Silence useless log messages from celery in dev 2026-01-09 17:31:17 +01:00
luelista
9222ce0ecd datasync: Fix configuring value mappings on newly added property mappings (Z#23217990) (#5793) 2026-01-09 16:11:32 +01:00
dependabot[bot]
8afb0e43e0 Update sentry-sdk requirement from ==2.48.* to ==2.49.* (#5788)
Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version.
- [Release notes](https://github.com/getsentry/sentry-python/releases)
- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-python/compare/2.48.0...2.49.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-09 13:36:20 +01:00
Raphael Michel
c65fecf45e Fix #5765 -- Email rendering: Ampersands and placeholders in URLs (#5766) 2026-01-09 13:01:21 +01:00
George Hickman
1c684d62d4 Get the Organizer of organizer-level plugin log entries directly (#5784) 2026-01-08 14:41:34 +01:00
dependabot[bot]
48809dc477 Update dnspython requirement from ==2.7.* to ==2.8.* (#5770)
Updates the requirements on [dnspython](https://github.com/rthalley/dnspython) to permit the latest version.
- [Release notes](https://github.com/rthalley/dnspython/releases)
- [Changelog](https://github.com/rthalley/dnspython/blob/main/doc/whatsnew.rst)
- [Commits](https://github.com/rthalley/dnspython/compare/v2.7.0rc1...v2.8.0)

---
updated-dependencies:
- dependency-name: dnspython
  dependency-version: 2.8.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 13:13:20 +01:00
dependabot[bot]
71df116079 Bump django-bootstrap3 from 25.2 to 26.1 (#5764)
Bumps [django-bootstrap3](https://github.com/zostera/django-bootstrap3) from 25.2 to 26.1.
- [Changelog](https://github.com/zostera/django-bootstrap3/blob/main/CHANGELOG.md)
- [Commits](https://github.com/zostera/django-bootstrap3/compare/v25.2...v26.1)

---
updated-dependencies:
- dependency-name: django-bootstrap3
  dependency-version: '26.1'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 13:12:46 +01:00
dependabot[bot]
ad64f6e88b Update pillow requirement from ==11.3.* to ==12.1.* (#5768)
Updates the requirements on [pillow](https://github.com/python-pillow/Pillow) to permit the latest version.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/11.3.0...12.1.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 12.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:42:49 +01:00
dependabot[bot]
891ba9d99c Update django-phonenumber-field requirement from ==8.3.* to ==8.4.* (#5771)
Updates the requirements on [django-phonenumber-field](https://github.com/stefanfoulis/django-phonenumber-field) to permit the latest version.
- [Release notes](https://github.com/stefanfoulis/django-phonenumber-field/releases)
- [Changelog](https://github.com/django-phonenumber-field/django-phonenumber-field/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/stefanfoulis/django-phonenumber-field/compare/8.3.0...8.4.0)

---
updated-dependencies:
- dependency-name: django-phonenumber-field
  dependency-version: 8.4.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:42:39 +01:00
dependabot[bot]
5cd1476a07 Update bleach requirement from ==6.2.* to ==6.3.* (#5767)
Updates the requirements on [bleach](https://github.com/mozilla/bleach) to permit the latest version.
- [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
- [Commits](https://github.com/mozilla/bleach/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: bleach
  dependency-version: 6.3.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:40:54 +01:00
dependabot[bot]
cb393a0b31 Bump markdown from 3.9 to 3.10 (#5757)
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.9 to 3.10.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.9.0...3.10.0)

---
updated-dependencies:
- dependency-name: markdown
  dependency-version: '3.10'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:39:45 +01:00
dependabot[bot]
af59a89ecb Update pytest requirement from ==8.4.* to ==9.0.* (#5763)
Updates the requirements on [pytest](https://github.com/pytest-dev/pytest) to permit the latest version.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.0.dev0...9.0.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:39:21 +01:00
dependabot[bot]
1eb0008da9 Update isort requirement from ==6.1.* to ==7.0.* (#5760)
Updates the requirements on [isort](https://github.com/PyCQA/isort) to permit the latest version.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PyCQA/isort/compare/6.1.0...7.0.0)

---
updated-dependencies:
- dependency-name: isort
  dependency-version: 7.0.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:39:14 +01:00
dependabot[bot]
d6489c6dd8 Bump django-compressor from 4.5.1 to 4.6.0 (#5759)
Bumps [django-compressor](https://github.com/django-compressor/django-compressor) from 4.5.1 to 4.6.0.
- [Changelog](https://github.com/django-compressor/django-compressor/blob/develop/docs/changelog.txt)
- [Commits](https://github.com/django-compressor/django-compressor/compare/4.5.1...4.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:38:44 +01:00
dependabot[bot]
abe6acc9d8 Update redis requirement from ==7.0.* to ==7.1.* (#5758)
Updates the requirements on [redis](https://github.com/redis/redis-py) to permit the latest version.
- [Release notes](https://github.com/redis/redis-py/releases)
- [Changelog](https://github.com/redis/redis-py/blob/master/CHANGES)
- [Commits](https://github.com/redis/redis-py/compare/v7.0.0b1...v7.1.0)

---
updated-dependencies:
- dependency-name: redis
  dependency-version: 7.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 12:38:21 +01:00
dependabot[bot]
2dcbb791f0 Update sphinx-rtd-theme requirement from ~=3.1.0rc1 to ~=3.1.0rc2 (#5777)
Updates the requirements on [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) to permit the latest version.
- [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst)
- [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/3.1.0rc1...3.1.0rc2)

---
updated-dependencies:
- dependency-name: sphinx-rtd-theme
  dependency-version: 3.1.0rc2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 11:24:33 +01:00
dependabot[bot]
2efc40e20b Update django-otp requirement from ==1.6.* to ==1.7.* (#5779)
Updates the requirements on [django-otp](https://github.com/django-otp/django-otp) to permit the latest version.
- [Changelog](https://github.com/django-otp/django-otp/blob/master/CHANGES.rst)
- [Commits](https://github.com/django-otp/django-otp/compare/v1.6.0...v1.7.0)

---
updated-dependencies:
- dependency-name: django-otp
  dependency-version: 1.7.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-08 11:24:13 +01:00
Raphael Michel
0693681473 Drop support for Python 3.9 (#5783) 2026-01-08 11:22:58 +01:00
Jiří Pastrňák
3aabc8a163 Translations: Update Czech
Currently translated at 94.4% (240 of 254 strings)

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

powered by weblate
2026-01-08 11:19:59 +01:00
Jiří Pastrňák
062f8fa409 Translations: Update Czech
Currently translated at 69.9% (4333 of 6193 strings)

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

powered by weblate
2026-01-08 11:19:59 +01:00
CVZ-es
106339c928 Translations: Update Spanish
Currently translated at 100.0% (6193 of 6193 strings)

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

powered by weblate
2026-01-08 11:19:59 +01:00
CVZ-es
222ea08dd0 Translations: Update French
Currently translated at 100.0% (6193 of 6193 strings)

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

powered by weblate
2026-01-08 11:19:59 +01:00
17 changed files with 233 additions and 271 deletions

View File

@@ -23,13 +23,13 @@ jobs:
name: Tests
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11"]
python-version: ["3.10", "3.11", "3.13"]
database: [sqlite, postgres]
exclude:
- database: sqlite
python-version: "3.9"
- database: sqlite
python-version: "3.10"
- database: sqlite
python-version: "3.11"
services:
postgres:
image: postgres:15

View File

@@ -286,11 +286,6 @@ gross prices stay the same.
**This is less confusing to consumers and the end result is still compliant to EN 16931, so we recommend this for e-invoicing when (primarily) consumers are involved.**
Some gross prices **cannot** stay the same. For example, it is impossible to represent €15.00 incl. 19%, since a net
price of €12.60 would lead to €14.99 gross and a net price of €12.61 would lead to €15.01 gross. Since this algorithm
is supposed to be consumer-friendly, it has a bias for choosing €14.99 in this case, even if €15.01 would be a little
less of a difference.
The main downside is that it might be confusing when selling to business customers, since the prices of the identical tickets appear to be different.
Full computation for the example above:

View File

@@ -1,5 +1,5 @@
sphinx==9.1.*
sphinx-rtd-theme~=3.1.0rc1
sphinx-rtd-theme~=3.1.0rc2
sphinxcontrib-httpdomain~=1.8.1
sphinxcontrib-images~=1.0.1
sphinxcontrib-jquery~=4.1

View File

@@ -1,6 +1,6 @@
-e ../
sphinx==9.1.*
sphinx-rtd-theme~=3.1.0rc1
sphinx-rtd-theme~=3.1.0rc2
sphinxcontrib-httpdomain~=1.8.1
sphinxcontrib-images~=1.0.1
sphinxcontrib-jquery~=4.1

View File

@@ -3,7 +3,7 @@ name = "pretix"
dynamic = ["version"]
description = "Reinventing presales, one ticket at a time"
readme = "README.rst"
requires-python = ">=3.9"
requires-python = ">=3.10"
license = {file = "LICENSE"}
keywords = ["tickets", "web", "shop", "ecommerce"]
authors = [
@@ -29,7 +29,7 @@ dependencies = [
"arabic-reshaper==3.0.0", # Support for Arabic in reportlab
"babel",
"BeautifulSoup4==4.14.*",
"bleach==6.2.*",
"bleach==6.3.*",
"celery==5.6.*",
"chardet==5.2.*",
"cryptography>=44.0.0",
@@ -37,8 +37,8 @@ dependencies = [
"defusedcsv>=1.1.0",
"dnspython==2.*",
"Django[argon2]==4.2.*,>=4.2.26",
"django-bootstrap3==25.2",
"django-compressor==4.5.1",
"django-bootstrap3==26.1",
"django-compressor==4.6.0",
"django-countries==8.2.*",
"django-filter==25.1",
"django-formset-js-improved==0.5.0.4",
@@ -50,13 +50,13 @@ dependencies = [
"django-localflavor==5.0",
"django-markup",
"django-oauth-toolkit==2.3.*",
"django-otp==1.6.*",
"django-phonenumber-field==8.3.*",
"django-otp==1.7.*",
"django-phonenumber-field==8.4.*",
"django-redis==6.0.*",
"django-scopes==2.0.*",
"django-statici18n==2.6.*",
"djangorestframework==3.16.*",
"dnspython==2.7.*",
"dnspython==2.8.*",
"drf_ujson2==1.7.*",
"geoip2==5.*",
"importlib_metadata==8.*", # Polyfill, we can probably drop this once we require Python 3.10+
@@ -65,7 +65,7 @@ dependencies = [
"kombu==5.6.*",
"libsass==0.23.*",
"lxml",
"markdown==3.9", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
"markdown==3.10", # 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
"mt-940==4.30.*",
"oauthlib==3.3.*",
@@ -75,7 +75,7 @@ dependencies = [
"paypal-checkout-serversdk==1.0.*",
"PyJWT==2.10.*",
"phonenumberslite==9.0.*",
"Pillow==11.3.*",
"Pillow==12.1.*",
"pretix-plugin-build",
"protobuf==6.33.*",
"psycopg2-binary",
@@ -89,10 +89,10 @@ dependencies = [
"pytz-deprecation-shim==0.1.*",
"pyuca",
"qrcode==8.2",
"redis==7.0.*",
"redis==7.1.*",
"reportlab==4.4.*",
"requests==2.32.*",
"sentry-sdk==2.48.*",
"sentry-sdk==2.49.*",
"sepaxml==2.7.*",
"stripe==7.9.*",
"text-unidecode==1.*",
@@ -113,7 +113,7 @@ dev = [
"fakeredis==2.33.*",
"flake8==7.3.*",
"freezegun",
"isort==6.1.*",
"isort==7.0.*",
"pep8-naming==0.15.*",
"potypo",
"pytest-asyncio>=0.24",
@@ -123,7 +123,7 @@ dev = [
"pytest-mock==3.15.*",
"pytest-sugar",
"pytest-xdist==3.8.*",
"pytest==8.4.*",
"pytest==9.0.*",
"responses",
]

View File

@@ -284,27 +284,12 @@ def apply_rounding(rounding_mode: Literal["line", "sum_by_net", "sum_by_net_keep
# e.g. 99.99 at 19% is impossible since 84.03 + 19% = 100.00 and 84.02 + 19% = 99.98
target_gross_total = round_decimal((target_net_total * (1 + tax_rate / 100)), currency)
if target_net_total and target_gross_total > gross_total:
target_net_total -= min((target_gross_total - gross_total), len(lines) * minimum_unit)
try_target_gross_total = round_decimal((target_net_total * (1 + tax_rate / 100)), currency)
if try_target_gross_total <= gross_total:
target_gross_total = try_target_gross_total
diff_gross = target_gross_total - gross_total
diff_net = target_net_total - net_total
diff_gross_sgn = -1 if diff_gross < 0 else 1
diff_net_sgn = -1 if diff_net < 0 else 1
for l in lines:
if diff_gross and diff_net:
apply_diff = diff_gross_sgn * minimum_unit
l.price = l.gross_price_before_rounding + apply_diff
l.price_includes_rounding_correction = apply_diff
l.tax_value = l.tax_value_before_rounding
l.tax_value_includes_rounding_correction = Decimal("0.00")
changed.append(l)
diff_gross -= apply_diff
diff_net -= apply_diff
elif diff_gross:
if diff_gross:
apply_diff = diff_gross_sgn * minimum_unit
l.price = l.gross_price_before_rounding + apply_diff
l.price_includes_rounding_correction = apply_diff
@@ -327,11 +312,6 @@ def apply_rounding(rounding_mode: Literal["line", "sum_by_net", "sum_by_net_keep
l.tax_value_includes_rounding_correction = Decimal("0.00")
changed.append(l)
# Double-check that result is consistent in computing gross from net
new_net_total = sum(l.price - l.tax_value for l in lines)
new_gross_total = sum(l.price for l in lines)
assert new_gross_total == round_decimal((new_net_total * (1 + tax_rate / 100)), currency)
elif rounding_mode == "line":
for l in lines:
if l.price_includes_rounding_correction or l.tax_value_includes_rounding_correction:

View File

@@ -32,13 +32,14 @@
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import html
import re
import urllib.parse
import bleach
import markdown
from bleach import DEFAULT_CALLBACKS
from bleach.linkifier import build_email_re, build_url_re
from bleach import DEFAULT_CALLBACKS, html5lib_shim
from bleach.linkifier import build_email_re
from django import template
from django.conf import settings
from django.core import signing
@@ -124,6 +125,23 @@ ALLOWED_ATTRIBUTES = {
ALLOWED_PROTOCOLS = {'http', 'https', 'mailto', 'tel'}
def build_url_re(tlds=tld_set, protocols=html5lib_shim.allowed_protocols):
# Differs from bleach regex by allowing { and } in URL to allow placeholders in URL parameters
return re.compile(
r"""\(* # Match any opening parentheses.
\b(?<![@.])(?:(?:{0}):/{{0,3}}(?:(?:\w+:)?\w+@)?)? # http://
([\w-]+\.)+(?:{1})(?:\:[0-9]+)?(?!\.\w)\b # xx.yy.tld(:##)?
(?:[/?][^\s\|\\\^`<>"]*)?
# /path/zz (excluding "unsafe" chars from RFC 3986,
# except for # and ~, which happen in practice)
""".format(
"|".join(sorted(protocols)), "|".join(sorted(tlds))
),
re.IGNORECASE | re.VERBOSE | re.UNICODE,
)
URL_RE = SimpleLazyObject(lambda: build_url_re(tlds=sorted(tld_set, key=len, reverse=True)))
EMAIL_RE = SimpleLazyObject(lambda: build_email_re(tlds=sorted(tld_set, key=len, reverse=True)))
@@ -333,8 +351,14 @@ def markdown_compile_email(source, allowed_tags=None, allowed_attributes=ALLOWED
# This is a workaround to fix placeholders in URL targets
def context_callback(attrs, new=False):
if (None, "href") in attrs and "{" in attrs[None, "href"]:
# Do not use MODE_RICH_TO_HTML to avoid recursive linkification
attrs[None, "href"] = escape(format_map(attrs[None, "href"], context=context, mode=SafeFormatter.MODE_RICH_TO_PLAIN))
# Do not use MODE_RICH_TO_HTML to avoid recursive linkification.
# We want to esacpe the end result, however, we need to unescape the input to prevent & being turned
# to &amp;amp; because the input is already escaped by the markdown parser.
attrs[None, "href"] = escape(format_map(
html.unescape(attrs[None, "href"]),
context=context,
mode=SafeFormatter.MODE_RICH_TO_PLAIN
))
return attrs
context_callbacks.append(context_callback)

View File

@@ -871,8 +871,7 @@ class TaxSettingsForm(EventSettingsValidationMixin, SettingsForm):
"Recommended for e-invoicing when you primarily sell to consumers. "
"The gross or net price of some products may be changed automatically to ensure correct "
"rounding of the order total. The system attempts to keep gross prices as configured whenever "
"possible. Gross prices may still change if they are impossible to derive from a rounded net price, "
"but the system will prefer rounding them down instead of up."
"possible. Gross prices may still change if they are impossible to derive from a rounded net price."
),
}
self.fields["tax_rounding"].choices = (

View File

@@ -814,7 +814,7 @@ class OrganizerPluginStateLogEntryType(LogEntryType):
if app and hasattr(app, 'PretixPluginMeta'):
return {
'href': reverse('control:organizer.settings.plugins', kwargs={
'organizer': logentry.event.organizer.slug,
'organizer': logentry.organizer.slug,
}) + '#plugin_' + logentry.parsed_data['plugin'],
'val': app.PretixPluginMeta.name
}

View File

@@ -55,7 +55,7 @@
<div class="col-md-2">
{% bootstrap_field formset.empty_form.overwrite layout='inline' form_group_class="" %}
</div>
{{ f.value_map.as_hidden }}
{{ formset.empty_form.value_map.as_hidden }}
<div class="col-md-2 text-right flip">
<i class="fa fa-warning hidden" data-toggle="tooltip" title=""></i>
<button type="button" class="btn btn-default hidden" data-edit-value-map data-toggle="modal"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
"PO-Revision-Date: 2026-01-05 15:14+0000\n"
"PO-Revision-Date: 2026-01-08 04:00+0000\n"
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix/cs/>"
"\n"
@@ -1881,7 +1881,7 @@ msgstr "IČO"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:99
#: pretix/presale/templates/pretixpresale/event/order.html:327
msgid "VAT ID"
msgstr "DPH"
msgstr "D"
#: pretix/base/exporters/invoices.py:216 pretix/base/exporters/invoices.py:217
#: pretix/base/exporters/invoices.py:218 pretix/base/exporters/invoices.py:219
@@ -1926,7 +1926,7 @@ msgstr "Příjemce"
#: pretix/control/templates/pretixcontrol/order/index.html:1064
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:111
msgid "Internal reference"
msgstr "Interní číslo"
msgstr "Interní označení"
#: pretix/base/exporters/invoices.py:226 pretix/base/models/tax.py:161
#: pretix/control/forms/event.py:1628
@@ -2594,7 +2594,7 @@ msgstr "Kód vstupenky"
#: pretix/base/modelimport_vouchers.py:272
#: pretix/plugins/checkinlists/exporters.py:527
msgid "Seat ID"
msgstr "ID sedadla"
msgstr "ID místa"
#: pretix/base/exporters/orderlist.py:623
#: pretix/plugins/checkinlists/exporters.py:528
@@ -2614,7 +2614,7 @@ msgstr "Řada"
#: pretix/base/exporters/orderlist.py:626
#: pretix/plugins/checkinlists/exporters.py:531
msgid "Seat number"
msgstr "Číslo sedadla"
msgstr "Číslo místa"
#: pretix/base/exporters/orderlist.py:627
#: pretix/control/templates/pretixcontrol/order/change.html:224
@@ -3345,7 +3345,7 @@ msgstr "Prosím uveďte kratší jméno."
#: pretix/base/forms/questions.py:314
msgctxt "phonenumber"
msgid "International area code"
msgstr "PSČ"
msgstr "Mezinárodní předvolba"
#: pretix/base/forms/questions.py:340
msgctxt "phonenumber"
@@ -3561,7 +3561,7 @@ msgstr "Firma nebo instituce"
#: pretix/base/forms/widgets.py:238
msgid "Individual customer"
msgstr "Zákazník"
msgstr "Fyzická osoba"
#: pretix/base/invoicing/email.py:50
msgid "Email invoice directly to accounting department"
@@ -3571,19 +3571,15 @@ msgstr "Zaslat fakturu přímo účetnímu oddělení"
msgid ""
"If not selected, the invoice will be sent to you using the email address "
"listed above."
msgstr ""
msgstr "Pokud tuto možnost nezvolíte, zašleme fakturu na e-mail uvedený výše."
#: pretix/base/invoicing/email.py:55
#, fuzzy
#| msgid "Email address verified"
msgid "Email address for invoice"
msgstr "E-mailová adresa ověřena"
msgstr "E-mail pro zaslání faktury"
#: pretix/base/invoicing/email.py:91
#, fuzzy
#| msgid "Preview email"
msgid "PDF via email"
msgstr "Náhled e-mailu"
msgstr "PDF do e-mailu"
#: pretix/base/invoicing/national.py:37
msgctxt "italian_invoice"
@@ -3642,7 +3638,7 @@ msgstr "Faktura od"
#: pretix/base/invoicing/pdf.py:433
msgctxt "invoice"
msgid "Invoice to"
msgstr "Faktura na"
msgstr "Fakturováno"
#: pretix/base/invoicing/pdf.py:470 pretix/base/invoicing/pdf.py:1221
msgctxt "invoice"
@@ -3672,12 +3668,12 @@ msgstr "Datum zrušení"
#: pretix/base/invoicing/pdf.py:504
msgctxt "invoice"
msgid "Original invoice date"
msgstr "Původní datum faktury"
msgstr "Datum originální faktury"
#: pretix/base/invoicing/pdf.py:511 pretix/base/invoicing/pdf.py:1258
msgctxt "invoice"
msgid "Invoice date"
msgstr "Datum faktury"
msgstr "Datum vystavení"
#: pretix/base/invoicing/pdf.py:527
msgctxt "invoice"
@@ -3704,7 +3700,7 @@ msgstr "Faktura č. {num}"
#, python-brace-format
msgctxt "invoice"
msgid "Customer reference: {reference}"
msgstr "Referenční číslo zákazníka: {reference}"
msgstr "Interní označení: {reference}"
#: pretix/base/invoicing/pdf.py:668
msgctxt "invoice"
@@ -3732,7 +3728,7 @@ msgstr "Faktura"
#: pretix/presale/templates/pretixpresale/event/order.html:244
msgctxt "invoice"
msgid "Cancellation"
msgstr "Zrušení"
msgstr "Storno"
#: pretix/base/invoicing/pdf.py:732 pretix/base/invoicing/pdf.py:740
msgctxt "invoice"
@@ -3768,13 +3764,13 @@ msgstr "Suma"
#, python-brace-format
msgctxt "invoice"
msgid "Single price: {net_price} net / {gross_price} gross"
msgstr "Jednotlivá cena: {net_price} netto / {gross_price} brutto"
msgstr "Jednotková cena: {net_price} netto / {gross_price} brutto"
#: pretix/base/invoicing/pdf.py:900
#, python-brace-format
msgctxt "invoice"
msgid "Single price: {price}"
msgstr "Jednotná cena: {price}"
msgstr "Jednotková cena: {price}"
#: pretix/base/invoicing/pdf.py:943 pretix/base/invoicing/pdf.py:948
msgctxt "invoice"
@@ -3802,12 +3798,10 @@ msgid "Remaining amount"
msgstr "Zbývající částka"
#: pretix/base/invoicing/pdf.py:1008
#, fuzzy, python-brace-format
#| msgctxt "invoice"
#| msgid "Event date: {date_range}"
#, python-brace-format
msgctxt "invoice"
msgid "Invoice period: {daterange}"
msgstr "Datum akce: {date_range}"
msgstr "Fakturované období: {daterange}"
#: pretix/base/invoicing/pdf.py:1039
msgctxt "invoice"
@@ -4175,7 +4169,7 @@ msgstr "Bylo nalezeno více shodných míst."
#: pretix/base/modelimport_orders.py:628
#: pretix/base/modelimport_vouchers.py:293
msgid "No matching seat was found."
msgstr "Nebylo nalezeno žádné odpovídající sedadlo."
msgstr "Nebylo nalezeno žádné odpovídající místo."
#: pretix/base/modelimport_orders.py:631
#: pretix/base/modelimport_vouchers.py:296 pretix/base/services/cart.py:220
@@ -4280,7 +4274,7 @@ msgstr "Pokud si vyberete místo, musíte si vybrat datum."
#: pretix/base/modelimport_vouchers.py:299 pretix/base/models/vouchers.py:516
msgid "You need to choose a specific product if you select a seat."
msgstr "Pokud si vyberete sedadlo, musíte si vybrat konkrétní produkt."
msgstr "Pokud si vyberete místo, musíte zvolit konkrétní produkt."
#: pretix/base/modelimport_vouchers.py:302 pretix/base/models/vouchers.py:519
msgid "Seat-specific vouchers can only be used once."
@@ -4289,7 +4283,7 @@ msgstr "Poukazy na konkrétní místo lze použít pouze jednou."
#: pretix/base/modelimport_vouchers.py:306 pretix/base/models/vouchers.py:522
#, python-brace-format
msgid "You need to choose the product \"{prod}\" for this seat."
msgstr "Pro toto sedadlo je třeba vybrat produkt \"{prod}\"."
msgstr "Pro toto místo je třeba vybrat produkt \"{prod}\"."
#: pretix/base/modelimport_vouchers.py:318 pretix/base/models/vouchers.py:288
#: pretix/control/templates/pretixcontrol/vouchers/index.html:129
@@ -5237,13 +5231,13 @@ msgstr ""
#, python-format
msgctxt "invoice"
msgid "Tax ID: %s"
msgstr "DIČ: %s"
msgstr "IČO: %s"
#: pretix/base/models/invoices.py:240 pretix/base/services/invoices.py:155
#, python-format
msgctxt "invoice"
msgid "VAT-ID: %s"
msgstr "IČO: %s"
msgstr "DIČ: %s"
#: pretix/base/models/items.py:93
msgid "Category name"
@@ -6446,7 +6440,7 @@ msgstr "Objednaný produkt \"{item}\" již není k dispozici."
#: pretix/base/models/orders.py:1066
#, python-brace-format
msgid "The seat \"{seat}\" is no longer available."
msgstr "Sedadlo \"{seat}\" již není k dispozici.."
msgstr "Místo \"{seat}\" již není k dispozici."
#: pretix/base/models/orders.py:1067
#, python-brace-format
@@ -6635,7 +6629,7 @@ msgstr "Obchodní zákazník"
#: pretix/base/models/orders.py:3407
msgid "This reference will be printed on your invoice for your convenience."
msgstr "Tento odkaz bude pro vaše potřeby vytištěn na faktuře."
msgstr "Tato informace bude uvedena na faktuře pro vaše potřeby."
#: pretix/base/models/orders.py:3534
msgid "Transmission type"
@@ -6831,7 +6825,7 @@ msgstr "Řada {number}"
#: pretix/base/models/seating.py:205
#, python-brace-format
msgid "Seat {number}"
msgstr "Sedadlo {number}"
msgstr "Místo {number}"
#: pretix/base/models/tax.py:143
msgid "Standard rates"
@@ -7273,7 +7267,7 @@ msgstr ""
#: pretix/base/models/vouchers.py:507
#, python-brace-format
msgid "The specified seat ID \"{id}\" does not exist for this event."
msgstr "Zadané ID sedadla \"{id}\" pro tuto událost neexistuje."
msgstr "Zadané ID místa \"{id}\" pro tuto událost neexistuje."
#: pretix/base/models/vouchers.py:511
#, python-brace-format
@@ -7314,7 +7308,7 @@ msgstr "Tento produkt není v současné době k dispozici."
#: pretix/base/models/waitinglist.py:186
msgid "No seat with this product is currently available."
msgstr "K tomuto produktu ne v současné době k dispozici žádné sedadlo."
msgstr "K tomuto produktu nejsou v současné době k dispozici žádná místa."
#: pretix/base/models/waitinglist.py:189
msgid "A voucher has already been sent to this person."
@@ -8133,11 +8127,11 @@ msgstr ""
#: pretix/base/pdf.py:505
msgid "Seat: Full name"
msgstr "Sedadlo: Celé jméno"
msgstr "Místo: Celé jméno"
#: pretix/base/pdf.py:506
msgid "Ground floor, Row 3, Seat 4"
msgstr "Přízemí, řada 3, sedadlo 4"
msgstr "Přízemí, řada 3, místo 4"
#: pretix/base/pdf.py:508 pretix/base/pdf.py:514
#: pretix/control/forms/orders.py:344
@@ -8146,7 +8140,7 @@ msgstr "včetně všech daní"
#: pretix/base/pdf.py:511
msgid "Seat: zone"
msgstr "Sedadlo: zóna"
msgstr "Místo: zóna"
#: pretix/base/pdf.py:512
msgid "Ground floor"
@@ -8154,11 +8148,11 @@ msgstr "parket"
#: pretix/base/pdf.py:517
msgid "Seat: row"
msgstr "sedadlo: řada"
msgstr "Místo: řada"
#: pretix/base/pdf.py:522
msgid "Seat: seat number"
msgstr "sedadlo: číslo"
msgstr "Místo: číslo"
#: pretix/base/pdf.py:527
msgid "Date and time of first scan"
@@ -8554,7 +8548,7 @@ msgstr "Tento poukaz není platný pro tento produkt."
#: pretix/base/services/cart.py:191
msgid "This voucher is not valid for this seat."
msgstr "Tento poukaz není platný pro toto sedadlo."
msgstr "Tento poukaz není platný pro toto místo."
#: pretix/base/services/cart.py:193
msgid ""
@@ -10354,11 +10348,8 @@ msgid "Automatic, but prefer invoice date over event date"
msgstr ""
#: pretix/base/settings.py:1169 pretix/base/settings.py:1180
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice date"
msgstr "Datum faktury"
msgstr "Datum vystavení"
#: pretix/base/settings.py:1173
#, fuzzy
@@ -10411,11 +10402,11 @@ msgstr "ulice Alberta-Einstein 52"
#: pretix/base/settings.py:1299
msgid "Domestic tax ID"
msgstr "Domácí daňové identifikační číslo"
msgstr "Lokální identifikační číslo"
#: pretix/base/settings.py:1300
msgid "e.g. tax number in Germany, ABN in Australia, …"
msgstr "např. daňové číslo v Německu, číslo ABN v Austrálii, …"
msgstr "např. IČO v Česku, daňové číslo v Německu, číslo ABN v Austrálii, …"
#: pretix/base/settings.py:1310
msgid "EU VAT ID"
@@ -12707,7 +12698,7 @@ msgstr "Pan"
#: pretix/base/settings.py:3873
msgctxt "person_name"
msgid "Degree (after name)"
msgstr "titul (za jménem)"
msgstr "Titul (za jménem)"
#: pretix/base/settings.py:3895
msgctxt "person_name_sample"
@@ -12922,7 +12913,7 @@ msgstr "Očekávaný název hostitele podle konfigurace"
#: pretix/base/templates/400_hostname.html:26
msgid "Received headers"
msgstr "Přijaté titulky"
msgstr "Přijaté hlavičky"
#: pretix/base/templates/400_hostname.html:32
msgid "ignored"
@@ -15751,7 +15742,7 @@ msgstr "Doplňkový produkt k"
#: pretix/presale/templates/pretixpresale/event/checkout_membership.html:23
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:101
msgid "Seat"
msgstr "Sedadlo"
msgstr "Místo"
#: pretix/control/forms/orders.py:348
#: pretix/control/templates/pretixcontrol/order/change.html:182
@@ -16557,7 +16548,7 @@ msgstr "Pozice #{posid}: Použité členství bylo změněno."
#: pretix/control/logdisplay.py:117
#, python-brace-format
msgid "Position #{posid}: Seat \"{old_seat}\" changed to \"{new_seat}\"."
msgstr "Pozice #{posid}: Sedadlo \" {old_seat}\" se změnilo na \"{new_seat}\"."
msgstr "Pozice #{posid}: Místo \" {old_seat}\" se změnilo na \"{new_seat}\"."
#: pretix/control/logdisplay.py:127
#, python-brace-format
@@ -18641,7 +18632,7 @@ msgstr "běží v režimu vývoje"
#: pretix/presale/templates/pretixpresale/postmessage.html:27
#: pretix/presale/templates/pretixpresale/waiting.html:42
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Pokud to trvá déle než několik minut, kontaktujte nás."
msgstr "Pokud akce trvá déle než několik minut, kontaktujte nás."
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4
#: pretix/control/templates/pretixcontrol/organizers/devices.html:71
@@ -21587,9 +21578,8 @@ msgid "August"
msgstr ""
#: pretix/control/templates/pretixcontrol/global_sysreport.html:24
#, fuzzy
msgid "September"
msgstr "Číslo sedadla"
msgstr "Září"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:25
msgid "October"
@@ -23309,12 +23299,12 @@ msgstr "Celkem"
#: pretix/control/templates/pretixcontrol/order/index.html:789
#: pretix/presale/templates/pretixpresale/event/order.html:210
msgid "Successful payments"
msgstr ""
msgstr "Úspěšné platby"
#: pretix/control/templates/pretixcontrol/order/index.html:798
#: pretix/presale/templates/pretixpresale/event/order.html:219
msgid "Pending total"
msgstr ""
msgstr "Čeká na platbu"
#: pretix/control/templates/pretixcontrol/order/index.html:824
#: pretix/control/templates/pretixcontrol/search/payments.html:88
@@ -28356,7 +28346,7 @@ msgstr ""
#: pretix/control/views/organizer.py:3483
#: pretix/control/views/organizer.py:3527
msgid "Your changes could not be saved."
msgstr ""
msgstr "Vaše změny nebyly uloženy."
#: pretix/control/views/organizer.py:982
msgid "The selected team cannot be deleted."
@@ -30853,7 +30843,7 @@ msgstr "Stránka %d z %d"
#: pretix/plugins/reports/exporters.py:210
#, python-format
msgid "Page %d"
msgstr "Strana %dd"
msgstr "Stránka %dd"
#: pretix/plugins/reports/exporters.py:212
#, python-format
@@ -33199,7 +33189,7 @@ msgstr "Váš košík"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:27
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:18
msgid "Cart expired"
msgstr "Nákupní košík vypršel"
msgstr "Rezervace košíku vypršela"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:36
msgid "Show full cart"
@@ -33430,7 +33420,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:9
msgid "Before we continue, we need you to answer some questions."
msgstr "Před provedením objednávky prosím odpovězte na níže uvedené otázky."
msgstr "Pro dokončení objednávky potřebujeme následující údaje."
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:49
msgid "Auto-fill with address"
@@ -33444,7 +33434,7 @@ msgstr "Vyplnit formulář"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:93
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:170
msgid "Copy answers from above"
msgstr "Zkopírujte odpovědi z výše uvedených položek"
msgstr "Zkopírujte odpovědi z předchozího"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:150
msgid "Auto-fill with profile"
@@ -33569,7 +33559,7 @@ msgstr "Zobrazit varianty"
#: pretix/presale/templates/pretixpresale/event/voucher.html:147
#: pretix/presale/templates/pretixpresale/event/voucher.html:304
msgid "Original price:"
msgstr "Originální cena:"
msgstr "Původní cena:"
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:136
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:278
@@ -33717,7 +33707,7 @@ msgstr "Celková cena"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:46
msgid "Seat:"
msgstr "Sedadlo:"
msgstr "Místo:"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:61
msgctxt "subevent"
@@ -33862,16 +33852,12 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
#, fuzzy
#| msgid "Event description"
msgid "Renew reservation"
msgstr "Popis akce"
msgstr "Obnovit rezervaci"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526
#, fuzzy
#| msgid "Reservation period"
msgid "Reservation renewed"
msgstr "Doba rezervace"
msgstr "Rezervace obnovena"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:532
msgid "Overview of your ordered products."
@@ -34176,14 +34162,12 @@ msgstr "Zobrazit obraz %(item)s v celé velikosti"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:131
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:288
#, fuzzy, python-format
#| msgid "%(count)s event"
#| msgid_plural "%(count)s events"
#, python-format
msgid "%(amount)s× in your cart"
msgid_plural "%(amount)s× in your cart"
msgstr[0] "%(count)s akce"
msgstr[1] "%(count)s akce"
msgstr[2] "%(count)s akcí"
msgstr[0] "%(amount)s× ve vašem košíku"
msgstr[1] "%(amount)s× ve vašem košíku"
msgstr[2] "%(amount)s× ve vašem košíku"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:374
@@ -34567,7 +34551,7 @@ msgstr "Změňte své údaje"
#: pretix/presale/templates/pretixpresale/event/order.html:335
msgid "Internal Reference"
msgstr "Interní reference"
msgstr "Interní označení"
#: pretix/presale/templates/pretixpresale/event/order.html:354
msgctxt "action"
@@ -35631,12 +35615,12 @@ msgid ""
"Your cart timeout was extended. Please note that some of the prices in your "
"cart changed."
msgstr ""
"Platnost vašeho košíku byla prodloužena. Berte prosím na vědomí, že ceny "
"některých položek ve vašem košíku se změnily."
#: pretix/presale/views/cart.py:573
#, fuzzy
#| msgid "Your cart has been updated."
msgid "Your cart timeout was extended."
msgstr "Váš košík byl aktualizován."
msgstr "Platnost vašeho košíku byla prodloužena."
#: pretix/presale/views/cart.py:588
msgid "The products have been successfully added to your cart."

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-05 12:13+0000\n"
"PO-Revision-Date: 2025-09-08 18:57+0000\n"
"Last-Translator: Alois Pospíšil <alois.pospisil@gmail.com>\n"
"PO-Revision-Date: 2026-01-08 04:00+0000\n"
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
"cs/>\n"
"Language: cs\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.15.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -416,7 +416,7 @@ msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
msgstr "Pokud akce trvá déle než několik minut, kontaktujte nás."
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
@@ -734,7 +734,7 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:49
msgid "Cart expired"
msgstr "Nákupní košík vypršel"
msgstr "Rezervace košíku vypršela"
#: pretix/static/pretixpresale/js/ui/cart.js:58
#: pretix/static/pretixpresale/js/ui/cart.js:84
@@ -753,27 +753,23 @@ msgstr[2] ""
#: pretix/static/pretixpresale/js/ui/cart.js:83
msgid "Your cart has expired."
msgstr "Nákupní košík vypršel."
msgstr "Platnost rezervace vašeho košíku vypršela."
#: pretix/static/pretixpresale/js/ui/cart.js:86
#, fuzzy
#| msgid ""
#| "The items in your cart are no longer reserved for you. You can still "
#| "complete your order as long as theyre available."
msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as they're available."
msgstr ""
"Produkty v nákupním košíku již nejsou pro vás rezervovány. Pokud je lístek "
"stále dostupný, můžete objednávku dokončit."
"Produkty v nákupním košíku již nejsou rezervovány. Svou objednávku se přesto "
"můžete pokusit dokončit, některé položky však už nemusí být dostupné."
#: pretix/static/pretixpresale/js/ui/cart.js:87
msgid "Do you want to renew the reservation period?"
msgstr ""
msgstr "Chcete obnovit rezervaci košíku?"
#: pretix/static/pretixpresale/js/ui/cart.js:90
msgid "Renew reservation"
msgstr ""
msgstr "Obnovit rezervaci"
#: pretix/static/pretixpresale/js/ui/main.js:194
msgid "The organizer keeps %(currency)s %(amount)s"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
"PO-Revision-Date: 2025-11-22 23:00+0000\n"
"PO-Revision-Date: 2026-01-06 23:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.14.3\n"
"X-Generator: Weblate 5.15.1\n"
#: pretix/_base_settings.py:87
msgid "English"
@@ -3870,7 +3870,7 @@ msgstr ""
#: pretix/base/invoicing/peppol.py:164
msgid "The Peppol participant ID is not registered on the Peppol network."
msgstr ""
msgstr "El ID de participante de Peppol no está registrado en la red Peppol."
#: pretix/base/invoicing/peppol.py:184
msgid "Peppol participant ID"
@@ -8445,6 +8445,8 @@ msgid ""
"Some products can no longer be purchased and have been removed from your "
"cart for the following reason: %s"
msgstr ""
"Algunos productos ya no se pueden comprar y se han eliminado de su carrito "
"por el siguiente motivo: %s"
#: pretix/base/services/cart.py:117
msgid ""
@@ -9626,21 +9628,15 @@ msgid "Uncategorized"
msgstr "Sin categorías"
#: pretix/base/services/tax.py:43
#, fuzzy
#| msgid ""
#| "Your VAT ID could not be checked, as the VAT checking service of your "
#| "country is currently not available. We will therefore need to charge VAT "
#| "on your invoice. You can get the tax amount back via the VAT "
#| "reimbursement process."
msgid ""
"Your VAT ID could not be checked, as the VAT checking service of your "
"country is currently not available. We will therefore need to charge you the "
"same tax rate as if you did not enter a VAT ID."
msgstr ""
"Tu Identificador IVA no puede ser chequeado, porque el verificador para tu "
"país no está disponible actualmente. Nosotros deberemos de cargar el IVA en "
"tu compra. Puedes obtener el total del impuesto mediante el proceso de "
"reembolso de IVA."
"No se ha podido verificar su número de identificación fiscal, ya que el "
"servicio de verificación del IVA de su país no está disponible en este "
"momento. Por lo tanto, tendremos que cobrarle el mismo tipo impositivo que "
"si no hubiera introducido ningún número de identificación fiscal."
#: pretix/base/services/tax.py:47 pretix/base/services/tax.py:366
#: pretix/base/services/tax.py:393
@@ -10081,24 +10077,18 @@ msgid "Ask for VAT ID"
msgstr "Solicitar ID de IVA"
#: pretix/base/settings.py:632
#, fuzzy, python-brace-format
#| msgid ""
#| "Only works if an invoice address is asked for. VAT ID is never required "
#| "and only requested from business customers in the following countries: "
#| "{countries}"
#, python-brace-format
msgid ""
"Only works if an invoice address is asked for. VAT ID is only requested from "
"business customers in the following countries: {countries}."
msgstr ""
"Solo funciona si se solicita una dirección de factura. El ID de IVA nunca es "
"obligatorio y solo se solicita a clientes comerciales en los siguientes "
"países: {countries}"
"Solo funciona si se solicita una dirección de facturación. El número de "
"identificación fiscal solo se solicita a los clientes empresariales de los "
"siguientes países: {countries}."
#: pretix/base/settings.py:651
#, fuzzy
#| msgid "Require name"
msgid "Require VAT ID in"
msgstr "Requerir nombre"
msgstr "Solicitar número de identificación fiscal en"
#: pretix/base/settings.py:657
msgid ""
@@ -10106,6 +10096,10 @@ msgid ""
"ID in all countries. VAT ID will be required for all business addresses in "
"the selected countries."
msgstr ""
"El número de identificación fiscal es opcional por defecto, ya que no todas "
"las empresas tienen asignado un número de identificación fiscal en todos los "
"países. El número de identificación fiscal será obligatorio para todas las "
"direcciones comerciales en los países seleccionados."
#: pretix/base/settings.py:672
msgid "Invoice address explanation"
@@ -13838,11 +13832,9 @@ msgstr ""
"mismo origen\"."
#: pretix/base/views/js_helpers.py:41
#, fuzzy
#| msgid "ID"
msgctxt "tax_id_swiss"
msgid "UID"
msgstr "ID"
msgstr "UID"
#. Translators: Only translate to French (IDE) and Italien (IDI), otherwise keep the same
#. Awareness around VAT IDs differes by EU country. For example, in Germany the VAT ID is assigned
@@ -13852,35 +13844,27 @@ msgstr "ID"
#. number (Partita IVA) and also used on domestic transactions. So someone who never purchased something international
#. for their company, might still know the value, if we call it the right way and not just "VAT ID".
#: pretix/base/views/js_helpers.py:49
#, fuzzy
#| msgid "VAT ID"
msgctxt "tax_id_italy"
msgid "VAT ID / P.IVA"
msgstr "Identificador IVA"
msgstr "Número de identificación fiscal / P.IVA"
#. Translators: Translate to only "P.IVA" in Italian, keep second part as-is in other languages
#: pretix/base/views/js_helpers.py:50
#, fuzzy
#| msgid "VAT ID"
msgctxt "tax_id_greece"
msgid "VAT ID / TIN"
msgstr "Identificador IVA"
msgstr "Número de identificación fiscal / TIN"
#. Translators: Translate to only "ΑΦΜ" in Greek
#: pretix/base/views/js_helpers.py:51
#, fuzzy
#| msgid "VAT ID"
msgctxt "tax_id_spain"
msgid "VAT ID / NIF"
msgstr "Identificador IVA"
msgstr "Número de identificación fiscal / NIF"
#. Translators: Translate to only "NIF" in Spanish
#: pretix/base/views/js_helpers.py:52
#, fuzzy
#| msgid "VAT ID"
msgctxt "tax_id_portugal"
msgid "VAT ID / NIF"
msgstr "Identificador IVA"
msgstr "NIF"
#: pretix/base/views/tasks.py:185
msgid "An unexpected error has occurred, please try again later."
@@ -14436,6 +14420,9 @@ msgid ""
"Formatting is not supported, as some accounting departments process mail "
"automatically and do not handle formatted emails properly."
msgstr ""
"No se admite el formato, ya que algunos departamentos de contabilidad "
"procesan el correo automáticamente y no gestionan correctamente los correos "
"electrónicos con formato."
#: pretix/control/forms/event.py:1356
msgid ""
@@ -14889,7 +14876,7 @@ msgstr "Pagado"
#: pretix/control/forms/filter.py:1304
msgctxt "subevent"
msgid "Date doesn't start in selected date range."
msgstr ""
msgstr "La fecha no comienza en el intervalo de fechas seleccionado."
#: pretix/control/forms/filter.py:1360 pretix/control/forms/filter.py:1827
msgid "Shop live and presale running"
@@ -28812,6 +28799,9 @@ msgid ""
"automatically. We recommend that you rename these in your source file to "
"avoid problems during import."
msgstr ""
"Varias columnas del archivo CSV tienen el mismo nombre y se han renombrado "
"automáticamente. Le recomendamos que cambie el nombre de estas columnas en "
"su archivo de origen para evitar problemas durante la importación."
#: pretix/control/views/modelimport.py:188
msgid "The import was successful."
@@ -30483,7 +30473,7 @@ msgstr ""
#: pretix/plugins/banktransfer/camtimport.py:33
msgid "Empty file or unknown format."
msgstr ""
msgstr "Archivo vacío o formato desconocido."
#: pretix/plugins/banktransfer/payment.py:69
msgid ""
@@ -33053,16 +33043,17 @@ msgid "Przelewy24"
msgstr "Przelewy24"
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1836
#, fuzzy
#| msgid "Payment by bank transfer"
msgid "Pay by bank"
msgstr "Pago por transferencia bancaria"
msgstr "Pagar por transferencia bancaria"
#: pretix/plugins/stripe/payment.py:422
msgid ""
"Currently only available for charges in GBP and customers with UK bank "
"accounts, and in private preview for France and Germany."
msgstr ""
"Actualmente solo disponible para cargos en libra esterlina y clientes con "
"cuentas bancarias en el Reino Unido, y en vista previa privada para Francia "
"y Alemania."
#: pretix/plugins/stripe/payment.py:429 pretix/plugins/stripe/payment.py:1789
msgid "WeChat Pay"
@@ -33374,16 +33365,17 @@ msgstr ""
"favor, tenga a mano su información de acceso."
#: pretix/plugins/stripe/payment.py:1835
#, fuzzy
#| msgid "PayPal via Stripe"
msgid "Pay by bank via Stripe"
msgstr "PayPal via Stripe"
msgstr "Pagar por transferencia bancaria a través de Stripe"
#: pretix/plugins/stripe/payment.py:1841
msgid ""
"Pay by bank allows you to authorize a secure Open Banking payment from your "
"banking app. Currently available only with a UK bank account."
msgstr ""
"El pago por banco te permite autorizar un pago seguro de banca abierta desde "
"tu aplicación bancaria. Actualmente solo disponible con una cuenta bancaria "
"del Reino Unido."
#: pretix/plugins/stripe/payment.py:1861
msgid "PayPal via Stripe"
@@ -33402,22 +33394,16 @@ msgstr ""
"suecas Swish y BankID. Por favor, ten tu app preparada."
#: pretix/plugins/stripe/payment.py:1893
#, fuzzy
#| msgid "giropay via Stripe"
msgid "PromptPay via Stripe"
msgstr "giropay via Stripe"
msgstr "PromptPay a través de Stripe"
#: pretix/plugins/stripe/payment.py:1898
#, fuzzy
#| msgid ""
#| "This payment method is available to MobilePay app users in Denmark and "
#| "Finland. Please have your app ready."
msgid ""
"This payment method is available to PromptPay users in Thailand. Please have "
"your app ready."
msgstr ""
"Este modo de pago está disponible para los usuarios de la aplicación "
"MobilePay en Dinamarca y Finlandia. Por favor, tenga su app preparada."
"Este método de pago está disponible para los usuarios de PromptPay en "
"Tailandia. Por favor, tenga su aplicación lista."
#: pretix/plugins/stripe/payment.py:1917
msgid "TWINT via Stripe"
@@ -33728,22 +33714,16 @@ msgid "Confirm payment: %(code)s"
msgstr "Confirmar pago: %(code)s"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:32
#, fuzzy
#| msgid ""
#| "Please scan the barcode below to complete your WeChat payment. Once you "
#| "have completed your payment, you can refresh this page."
msgid ""
"Please scan the QR code below to complete your PromptPay payment. Once you "
"have completed your payment, you can refresh this page."
msgstr ""
"Escanee el código de barras a continuación para completar su pago de WeChat. "
"Una vez que haya completado su pago, puede actualizar esta página."
"Escanee el código QR que aparece a continuación para completar su pago con "
"PromptPay. Una vez que haya completado el pago, puede actualizar esta página."
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:37
#, fuzzy
#| msgid "Create QR code"
msgid "PromptPay QR code"
msgstr "Crear código QR"
msgstr "Código QR de PromptPay"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:20
msgid "Confirming your payment…"
@@ -34790,14 +34770,11 @@ msgstr[0] "Necesitas elegir exactamente una opción para esta categoría."
msgstr[1] "Necesitas elegir %(min_count)s opciones para esta categoría."
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:26
#, fuzzy, python-format
#| msgid "You can choose at most one option from this category."
#| msgid_plural ""
#| "You can choose up to %(max_count)s options from this category."
#, python-format
msgid "You can choose one option from this category."
msgid_plural "You can choose up to %(max_count)s options from this category."
msgstr[0] "Puedes elegir como máximo una opción en esta categoría."
msgstr[1] "Puedes elegir como máximo %(max_count)s opciones en esta categoría."
msgstr[0] "Puede elegir una opción de esta categoría."
msgstr[1] "Puede elegir hasta %(max_count)s opciones de esta categoría."
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:34
#, python-format
@@ -36885,6 +36862,8 @@ msgid ""
"Your cart timeout was extended. Please note that some of the prices in your "
"cart changed."
msgstr ""
"Se ha ampliado el tiempo de espera de su carrito. Tenga en cuenta que "
"algunos de los precios de su carrito han cambiado."
#: pretix/presale/views/cart.py:573
msgid "Your cart timeout was extended."

View File

@@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
"PO-Revision-Date: 2026-01-06 14:46+0000\n"
"PO-Revision-Date: 2026-01-06 23:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
"fr/>\n"
@@ -13974,25 +13974,25 @@ msgstr "UID"
#: pretix/base/views/js_helpers.py:49
msgctxt "tax_id_italy"
msgid "VAT ID / P.IVA"
msgstr "Numéro d'identification TVA"
msgstr "Numéro de TVA intracommunautaire"
#. Translators: Translate to only "P.IVA" in Italian, keep second part as-is in other languages
#: pretix/base/views/js_helpers.py:50
msgctxt "tax_id_greece"
msgid "VAT ID / TIN"
msgstr "Numéro d'identification TVA / TIN"
msgstr "Numéro de TVA intracommunautaire / TIN"
#. Translators: Translate to only "ΑΦΜ" in Greek
#: pretix/base/views/js_helpers.py:51
msgctxt "tax_id_spain"
msgid "VAT ID / NIF"
msgstr "Numéro d'identification TVA"
msgstr "Numéro de TVA intracommunautaire"
#. Translators: Translate to only "NIF" in Spanish
#: pretix/base/views/js_helpers.py:52
msgctxt "tax_id_portugal"
msgid "VAT ID / NIF"
msgstr "Numéro d'identification TVA / NIF"
msgstr "Numéro de TVA intracommunautaire / NIF"
#: pretix/base/views/tasks.py:185
msgid "An unexpected error has occurred, please try again later."
@@ -29015,6 +29015,9 @@ msgid ""
"automatically. We recommend that you rename these in your source file to "
"avoid problems during import."
msgstr ""
"Plusieurs colonnes du fichier CSV portent le même nom et ont été renommées "
"automatiquement. Nous vous recommandons de les renommer dans votre fichier "
"source afin d'éviter tout problème lors de l'importation."
#: pretix/control/views/modelimport.py:188
msgid "The import was successful."
@@ -30705,7 +30708,7 @@ msgstr ""
#: pretix/plugins/banktransfer/camtimport.py:33
msgid "Empty file or unknown format."
msgstr ""
msgstr "Fichier vide ou format inconnu."
#: pretix/plugins/banktransfer/payment.py:69
msgid ""
@@ -33300,16 +33303,17 @@ msgid "Przelewy24"
msgstr "Przelewy24"
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1836
#, fuzzy
#| msgid "Payment by bank transfer"
msgid "Pay by bank"
msgstr "Paiement par virement bancaire"
msgstr "Payer par virement bancaire"
#: pretix/plugins/stripe/payment.py:422
msgid ""
"Currently only available for charges in GBP and customers with UK bank "
"accounts, and in private preview for France and Germany."
msgstr ""
"Actuellement disponible uniquement pour les frais en livre sterling et les "
"clients disposant d'un compte bancaire au Royaume-Uni, et pour les clients "
"en test restreint pour la France et l'Allemagne."
#: pretix/plugins/stripe/payment.py:429 pretix/plugins/stripe/payment.py:1789
msgid "WeChat Pay"
@@ -33626,16 +33630,17 @@ msgstr ""
"connexion à porter de main."
#: pretix/plugins/stripe/payment.py:1835
#, fuzzy
#| msgid "PayPal via Stripe"
msgid "Pay by bank via Stripe"
msgstr "PayPal via Stripe"
msgstr "Payer par virement bancaire via Stripe"
#: pretix/plugins/stripe/payment.py:1841
msgid ""
"Pay by bank allows you to authorize a secure Open Banking payment from your "
"banking app. Currently available only with a UK bank account."
msgstr ""
"Le paiement par virement bancaire vous permet d'autoriser un paiement "
"sécurisé via Open Banking depuis votre application bancaire. Actuellement "
"disponible uniquement avec un compte bancaire britannique."
#: pretix/plugins/stripe/payment.py:1861
msgid "PayPal via Stripe"
@@ -33654,22 +33659,16 @@ msgstr ""
"suédoises Swish et BankID. Veuillez préparer votre application."
#: pretix/plugins/stripe/payment.py:1893
#, fuzzy
#| msgid "giropay via Stripe"
msgid "PromptPay via Stripe"
msgstr "giropay via Stripe"
msgstr "PromptPay via Stripe"
#: pretix/plugins/stripe/payment.py:1898
#, fuzzy
#| msgid ""
#| "This payment method is available to MobilePay app users in Denmark and "
#| "Finland. Please have your app ready."
msgid ""
"This payment method is available to PromptPay users in Thailand. Please have "
"your app ready."
msgstr ""
"Ce mode de paiement est disponible pour les utilisateurs de l'application "
"MobilePay au Danemark et en Finlande. Veuillez préparer votre application."
"Ce mode de paiement est disponible pour les utilisateurs de PromptPay en "
"Thaïlande. Veuillez préparer votre application."
#: pretix/plugins/stripe/payment.py:1917
msgid "TWINT via Stripe"
@@ -33984,23 +33983,17 @@ msgid "Confirm payment: %(code)s"
msgstr "Confirmer le paiement : %(code)s"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:32
#, fuzzy
#| msgid ""
#| "Please scan the barcode below to complete your WeChat payment. Once you "
#| "have completed your payment, you can refresh this page."
msgid ""
"Please scan the QR code below to complete your PromptPay payment. Once you "
"have completed your payment, you can refresh this page."
msgstr ""
"Veuillez scanner le code-barres ci-dessous pour effectuer votre paiement "
"WeChat. Une fois que vous avez effectué votre paiement, vous pouvez "
"actualiser cette page."
"Veuillez scanner le code QR ci-dessous pour effectuer votre paiement "
"PromptPay. Une fois votre paiement effectué, vous pouvez actualiser cette "
"page."
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca.html:37
#, fuzzy
#| msgid "Create QR code"
msgid "PromptPay QR code"
msgstr "Créer un code QR"
msgstr "Code QR PromptPay"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/sca_return.html:20
msgid "Confirming your payment…"
@@ -35057,14 +35050,11 @@ msgstr[0] "Vous devez choisir exactement une option de cette catégorie."
msgstr[1] "Vous devez choisir les options %(min_count)s de cette catégorie."
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:26
#, fuzzy, python-format
#| msgid "You can choose at most one option from this category."
#| msgid_plural ""
#| "You can choose up to %(max_count)s options from this category."
#, python-format
msgid "You can choose one option from this category."
msgid_plural "You can choose up to %(max_count)s options from this category."
msgstr[0] "Vous pouvez choisir au plus une option de cette catégorie."
msgstr[1] "Vous pouvez choisir jusqu' à %(max_count)s dans cette catégorie."
msgstr[0] "Vous pouvez choisir une option dans cette catégorie."
msgstr[1] "Vous pouvez choisir jusqu'à %(max_count)s options dans cette catégorie."
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:34
#, python-format
@@ -37195,6 +37185,8 @@ msgid ""
"Your cart timeout was extended. Please note that some of the prices in your "
"cart changed."
msgstr ""
"Le délai d'expiration de votre panier a été prolongé. Veuillez noter que "
"certains prix dans votre panier ont changé."
#: pretix/presale/views/cart.py:573
msgid "Your cart timeout was extended."

View File

@@ -656,6 +656,11 @@ LOGGING = {
'handlers': ['null'],
'propagate': False,
},
'celery.utils.functional': {
'handlers': ['file', 'console'],
'level': 'INFO', # Do not output all the queries
'propagate': False,
},
'django.db.backends': {
'handlers': ['file', 'console'],
'level': 'INFO', # Do not output all the queries

View File

@@ -227,7 +227,9 @@ def test_placeholder_html_rendering_from_string(env):
"Event website: [{event}](https://example.org/{event_slug})\n\n"
"Other website: [{event}]({meta_Website})\n\n"
"URL: {url}\n\n"
"URL with text: <a href=\"{url}\">Test</a>"
"URL with text: <a href=\"{url}\">Test</a>\n\n"
"URL with params: https://example.com/form?action=foo&eventid={event_slug}\n\n"
"URL with params and text: [Link & Text](https://example.com/form?action=foo&eventid={event_slug})\n\n"
})
djmail.outbox = []
event, user, organizer = env
@@ -249,6 +251,8 @@ def test_placeholder_html_rendering_from_string(env):
assert '**Meta**: *Beep*' in djmail.outbox[0].body
assert 'URL: https://google.com' in djmail.outbox[0].body
assert 'URL with text: <a href="https://google.com">Test</a>' in djmail.outbox[0].body
assert 'URL with params: https://example.com/form?action=foo&eventid=dummy' in djmail.outbox[0].body
assert 'URL with params and text: [Link & Text](https://example.com/form?action=foo&eventid=dummy)' in djmail.outbox[0].body
assert '&lt;' not in djmail.outbox[0].body
assert '&amp;' not in djmail.outbox[0].body
html = _extract_html(djmail.outbox[0])
@@ -272,3 +276,13 @@ def test_placeholder_html_rendering_from_string(env):
r'URL with text: <a href="https://google.com" rel="noopener" style="[^"]+" target="_blank">Test</a>',
html
)
assert re.search(
r'URL with params: <a href="https://example.com/form\?action=foo&amp;eventid=dummy" rel="noopener" '
r'style="[^"]+" target="_blank">https://example.com/form\?action=foo&amp;eventid=dummy</a>',
html
)
assert re.search(
r'URL with params and text: <a href="https://example.com/form\?action=foo&amp;eventid=dummy" rel="noopener" '
r'style="[^"]+" target="_blank">Link &amp; Text</a>',
html
)

View File

@@ -134,12 +134,17 @@ def test_revert_net_keep_gross_rounding_to_single_line(sample_lines):
assert l.tax_rate == Decimal("19.00")
def test_rounding_of_impossible_gross_price():
@pytest.mark.django_db
@pytest.mark.parametrize("rounding_mode", [
"sum_by_net",
"sum_by_net_keep_gross",
])
def test_rounding_of_impossible_gross_price(rounding_mode):
l = OrderPosition(
price=Decimal("23.00"),
)
l._calculate_tax(tax_rule=TaxRule(rate=Decimal("7.00")), invoice_address=InvoiceAddress())
apply_rounding("sum_by_net", "EUR", [l])
apply_rounding(rounding_mode, "EUR", [l])
assert l.price == Decimal("23.01")
assert l.price_includes_rounding_correction == Decimal("0.01")
assert l.tax_value == Decimal("1.51")
@@ -147,19 +152,6 @@ def test_rounding_of_impossible_gross_price():
assert l.tax_rate == Decimal("7.00")
def test_rounding_of_impossible_gross_price_keep_gross():
l = OrderPosition(
price=Decimal("23.00"),
)
l._calculate_tax(tax_rule=TaxRule(rate=Decimal("7.00")), invoice_address=InvoiceAddress())
apply_rounding("sum_by_net_keep_gross", "EUR", [l])
assert l.price == Decimal("22.99")
assert l.price_includes_rounding_correction == Decimal("-0.01")
assert l.tax_value == Decimal("1.50")
assert l.tax_value_includes_rounding_correction == Decimal("0.00")
assert l.tax_rate == Decimal("7.00")
@pytest.mark.django_db
def test_round_down():
lines = [OrderPosition(
@@ -244,8 +236,10 @@ def test_do_not_touch_free(rounding_mode):
)
l2._calculate_tax(tax_rule=TaxRule(rate=Decimal("7.00")), invoice_address=InvoiceAddress())
apply_rounding(rounding_mode, "EUR", [l1, l2])
assert l2.price == Decimal("23.01") or l2.price == Decimal("22.99")
assert l2.price_includes_rounding_correction != Decimal("0.00") or l2.tax_value_includes_rounding_correction != Decimal("0.00")
assert l2.price == Decimal("23.01")
assert l2.price_includes_rounding_correction == Decimal("0.01")
assert l2.tax_value == Decimal("1.51")
assert l2.tax_value_includes_rounding_correction == Decimal("0.01")
assert l2.tax_rate == Decimal("7.00")
assert l1.price == Decimal("0.00")
assert l1.price_includes_rounding_correction == Decimal("0.00")