Compare commits

..

50 Commits

Author SHA1 Message Date
51cdb437db Remove gendered language from de/de_Informal translations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 21:56:20 +02:00
215dc8b48b Merge branch 'master' into upstream/2026.4.1 2026-05-16 21:54:40 +02:00
Raphael Michel
f88a560d5f Bump to 2026.4.1 2026-05-04 11:24:26 +02:00
Thomas Göttgens
4019f956a8 Fix Dockerfile syntax for chmod command (#6145) 2026-05-04 11:24:04 +02:00
Raphael Michel
c75c847393 Settings: Fix typo in class path to mail backend (#6144) 2026-05-04 11:24:04 +02:00
luelista
4e3d3b1f22 Fix permissions of /pretix in docker container (#6133) 2026-05-04 11:24:04 +02:00
e2bf94ff9f Dockerfile: Fix /pretix permissions for nginx on Debian Trixie
Debian Trixie changed the default home directory mode from 0755 to 0700,
causing nginx (www-data) to get 403 Forbidden on all static files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 21:41:06 +02:00
a37e6c8270 Merge pull request 'upstream/2026.4.0' (#15) from upstream/2026.4.0 into master
Reviewed-on: CGM_Public/pretix_cgo#15
2026-05-03 19:11:35 +00:00
dfe94e09cc Merge with Master 2026-05-03 21:08:58 +02:00
d87f7b0072 Merge pull request 'upstream/2026.3.1' (#14) from upstream/2026.3.1 into master
Reviewed-on: CGM_Public/pretix_cgo#14
2026-04-13 09:11:15 +00:00
393cd0235e Update Teilnehmer 2026-04-13 11:07:57 +02:00
7fdc7f3405 Merge with master 2026-04-13 11:05:15 +02:00
Raphael Michel
21d62c5078 Bump version to 2026.3.1 2026-04-08 13:58:36 +02:00
Raphael Michel
988dc112ac [SECURITY] API: Add missing event filter for check-ins 2026-04-08 13:58:23 +02:00
2da8d250c8 Merge pull request 'upstream/2026.2.0' (#13) from upstream/2026.2.0 into master
Reviewed-on: CGM_Public/pretix_cgo#13
2026-03-23 20:25:57 +00:00
02e0fed4a0 Merge branch 'master' into upstream/2026.2.0 2026-03-23 21:19:51 +01:00
932b646fcc Merge pull request 'upstream/v2026.1.0' (#12) from upstream/v2026.1.0 into master
Reviewed-on: CGM_Public/pretix_cgo#12
2026-02-03 21:56:31 +00:00
edf1bd08f8 Merge branch 'master' into upstream/v2026.1.0
# Conflicts:
#	src/pretix/__init__.py
2026-02-03 22:56:14 +01:00
09aff627bb Merge pull request 'upstream/2025.10.1' (#11) from upstream/2025.10.1 into master
Reviewed-on: CGM_Public/pretix_cgo#11
2025-12-26 19:38:03 +00:00
da87c64ea0 Merge branch 'master' into upstream/2025.10.1 2025-12-26 20:35:13 +01:00
Raphael Michel
5d87f9a26f Bump to 2025.10.1 2025-12-19 13:06:58 +01:00
Raphael Michel
4b5651862c [SECURITY] Prevent access to arbitrary cached files by UUID (CVE-2025-14881) 2025-12-19 13:06:48 +01:00
26f3a92d09 Merge pull request 'upstream/2025.10.0' (#10) from upstream/2025.10.0 into master
Reviewed-on: CGM_Public/pretix_cgo#10
2025-12-18 22:18:53 +00:00
d468e0a2b3 Merge master 2025-12-18 23:18:30 +01:00
8de80d5867 Merge pull request 'upstream/2025.9.0.1' (#9) from upstream/2025.9.0.1 into master
Reviewed-on: CGM_Public/pretix_cgo#9
2025-11-09 19:16:53 +00:00
ec3272dd7c merge with master 2025-11-09 20:13:46 +01:00
72b14e04c0 Merge with 2025.8.0 2025-10-05 20:58:06 +02:00
93cb51c7de Merge pull request 'upstream/2025.7.1' (#7) from upstream/2025.7.1 into master
Reviewed-on: simon/pretix_cgo#7
2025-09-16 17:03:57 +00:00
64b56afe44 Fix language file bug 2025-09-16 19:00:58 +02:00
8e16c18060 Merge branch 'master' into upstream/2025.7.1 2025-09-16 18:36:21 +02:00
Raphael Michel
2d42c1f166 Bump to 2025.7.1 2025-08-23 10:15:29 +02:00
Raphael Michel
e4b8c5da25 Bump hierarkey to 2.0.1 2025-08-23 09:14:06 +02:00
luelista
c85b496187 Organizer plugins: Do not show plugins as active if they are inactive on org-level (#5396) 2025-08-23 09:13:56 +02:00
b632fa620e Merge pull request 'upstream/2025.6.0' (#6) from upstream/2025.6.0 into master
Reviewed-on: simon/pretix_cgo#6
2025-07-04 20:24:59 +00:00
04684ed93f Merge pull request 'upstream/2025.5.0' (#5) from upstream/2025.5.0 into master
Reviewed-on: simon/pretix_cgo#5
2025-06-03 16:12:49 +00:00
466bf49941 Merge branch 'master' into upstream/2025.5.0 2025-06-03 17:51:30 +02:00
e03ec73490 Merge pull request 'upstream/2025.4.0' (#4) from upstream/2025.4.0 into master
Reviewed-on: simon/pretix_cgo#4
2025-05-08 22:05:43 +00:00
3fda118234 Merge branch 'master' into upstream/2025.4.0 2025-05-08 23:44:59 +02:00
1cb98d0837 Merge pull request 'upstream/2025.3.0' (#3) from upstream/2025.3.0 into master
Reviewed-on: simon/pretix_cgo#3
2025-03-30 20:07:31 +00:00
713e3a40aa Merge pull request 'upstream/2025.2.0' (#2) from upstream/2025.2.0 into master
Reviewed-on: simon/pretix_cgo#2
2025-03-07 22:45:05 +00:00
be234edc0f Merge from master 2025-03-07 23:10:21 +01:00
34efc2d953 Add relevant_orderlist exporter (including bugfixes)
This Exporter has the most useful information in the first rows of the
exported document. Specifically the product and the custom questions.
Other fields are also resorted somewhat to place very useless columns at
the end of the table. See code for details :)
- register relevant_orderlist as separate data_exporter
- sort it with the other order data exporters.
2025-02-12 13:17:21 +01:00
UpdateBot
82366dd6c9 Add debugging Information 2025-02-11 20:48:27 +01:00
UpdateBot
38abad0bf6 Update dockerbuild, use Tag if a tag was pushed, latest otherwise 2025-02-11 20:44:55 +01:00
41817fe080 Merge pull request 'Furhter text udpates' (#1) from release/2025.1.0 into master
Reviewed-on: simon/pretix_cgo#1
2025-02-10 14:49:03 +00:00
6cee467dbd Merge branch 'master' into release/2025.1.0 2025-02-10 14:48:25 +00:00
UpdateBot
931ba73f1d Furhter text udpates 2025-02-10 15:47:21 +01:00
UpdateBot
9179621e72 Use latest tag in master branch 2025-02-05 22:02:20 +01:00
UpdateBot
65c978558e Merge branch 'release/2025.1.0' 2025-02-05 22:01:24 +01:00
UpdateBot
f4f090506b Update Texts 2025-02-04 22:11:52 +01:00
29 changed files with 1468 additions and 388 deletions

View File

@@ -0,0 +1,31 @@
name: Build Deploy email notification tool
run-name: ${{ gitea.actor }} building new version of the email notification tool
on:
push: # Baut bei jedem Push (Branches + Tags)
workflow_dispatch:
jobs:
Apply-Kubernetes-Resources:
runs-on: podman
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Login to Docker Registry
run: podman login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_TOKEN }} cr.ortlerstrasse.de
- name: Set Docker Image Tag
run: |
if [[ "${{ gitea.ref }}" == refs/tags/* ]]; then
echo "TAG_NAME=${{ gitea.ref_name }}" >> $GITHUB_ENV
else
echo "TAG_NAME=latest" >> $GITHUB_ENV
fi
- name: Build Docker image
run: podman build -t cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }} .
- name: Push Docker image
run: |
podman push cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}
echo "Image pushed successfully: cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}"

View File

@@ -31,6 +31,7 @@ RUN apt-get update && \
mkdir /etc/pretix && \
mkdir /data && \
useradd -ms /bin/bash -d /pretix -u 15371 pretixuser && \
chmod 0755 /pretix && \
echo 'pretixuser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/supervisord' >> /etc/sudoers && \
mkdir /static && \
mkdir /etc/supervisord

View File

@@ -19,4 +19,4 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
__version__ = "2026.5.0.dev0"
__version__ = "2026.4.1"

View File

@@ -20,7 +20,6 @@
# <https://www.gnu.org/licenses/>.
#
import json
import re
from django.db.models import prefetch_related_objects
from rest_framework import serializers
@@ -136,30 +135,3 @@ class SalesChannelMigrationMixin:
else:
value["sales_channels"] = value["limit_sales_channels"]
return value
class CompatDecimalField(serializers.DecimalField):
"""
Historically, pretix recorded tax rates as decimals with two places. Today, pretix supports tax rates with up to
four places. Since our API outputs decimals with the stored precision, this would have changed the API output from
"19.00" to "19.0000" without warning. While this is semantically the same thing, we need to assume some pretix API
users might run into trouble, either because they treat the value as a string and then map something
(e.g. ``if tax_rate == "19.00"``) or process it with a language where this is a significant difference. For example,
while in Python ``Decimal("19.00") == Decimal("19.0000")`` is true, in Java
``(new BigDecimal("19.00")).equals(new BigDecimal("19.0000"))`` is false and only
``(new BigDecimal("19.00")).compareTo(new BigDecimal("19.0000")) == 0`` is true.
Therefore, we stay backwards compatible by outputting two decimal places *as long as the trailing digits are zero-valued.
"""
regex = re.compile(r"^([0-9]+\.[0-9]{2})0+$")
def to_representation(self, value):
if self.localize:
raise ValueError("localization not supported")
value = super().to_representation(value)
if value and "." not in value:
return f"{value}.00"
if m := self.regex.match(value):
return m.group(1)
return value

View File

@@ -48,7 +48,7 @@ from rest_framework.fields import ChoiceField, Field
from rest_framework.relations import SlugRelatedField
from pretix.api.serializers import (
CompatDecimalField, CompatibleJSONField, SalesChannelMigrationMixin,
CompatibleJSONField, SalesChannelMigrationMixin,
)
from pretix.api.serializers.fields import PluginsField
from pretix.api.serializers.i18n import I18nAwareModelSerializer
@@ -681,7 +681,6 @@ class TaxRuleSerializer(CountryFieldMixin, I18nAwareModelSerializer):
required=False,
allow_null=True,
)
rate = CompatDecimalField(max_digits=7, decimal_places=4)
class Meta:
model = TaxRule

View File

@@ -42,9 +42,7 @@ from django.utils.functional import cached_property, lazy
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from pretix.api.serializers import (
CompatDecimalField, SalesChannelMigrationMixin,
)
from pretix.api.serializers import SalesChannelMigrationMixin
from pretix.api.serializers.event import MetaDataField
from pretix.api.serializers.fields import UploadedFileField
from pretix.api.serializers.i18n import I18nAwareModelSerializer
@@ -278,10 +276,10 @@ class ItemAddOnSerializer(serializers.ModelSerializer):
return value
class ItemTaxRateField(CompatDecimalField):
class ItemTaxRateField(serializers.Field):
def to_representation(self, i):
if i.tax_rule:
return super().to_representation(Decimal(i.tax_rule.rate))
return str(Decimal(i.tax_rule.rate))
else:
return str(Decimal('0.00'))
@@ -291,7 +289,7 @@ class ItemSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer):
bundles = InlineItemBundleSerializer(many=True, required=False)
variations = InlineItemVariationSerializer(many=True, required=False)
program_times = InlineItemProgramTimeSerializer(many=True, required=False)
tax_rate = ItemTaxRateField(source='*', read_only=True, max_digits=7, decimal_places=4)
tax_rate = ItemTaxRateField(source='*', read_only=True)
meta_data = MetaDataField(required=False, source='*')
picture = UploadedFileField(required=False, allow_null=True, allowed_types=(
'image/png', 'image/jpeg', 'image/gif'

View File

@@ -41,7 +41,7 @@ from rest_framework.exceptions import ValidationError
from rest_framework.relations import SlugRelatedField
from rest_framework.reverse import reverse
from pretix.api.serializers import CompatDecimalField, CompatibleJSONField
from pretix.api.serializers import CompatibleJSONField
from pretix.api.serializers.event import SubEventSerializer
from pretix.api.serializers.forms import form_field_to_serializer_field
from pretix.api.serializers.i18n import I18nAwareModelSerializer
@@ -591,7 +591,6 @@ class OrderPositionSerializer(I18nAwareModelSerializer):
country = CompatibleCountryField(source='*')
attendee_name = serializers.CharField(required=False)
plugin_data = OrderPositionPluginDataField(source='*', allow_null=True, read_only=True)
tax_rate = CompatDecimalField(max_digits=7, decimal_places=4)
class Meta:
list_serializer_class = OrderPositionListSerializer
@@ -748,8 +747,6 @@ class OrderPaymentDateField(serializers.DateField):
class OrderFeeSerializer(I18nAwareModelSerializer):
tax_rate = CompatDecimalField(max_digits=7, decimal_places=4)
class Meta:
model = OrderFee
fields = ('id', 'fee_type', 'value', 'description', 'internal_type', 'tax_rate', 'tax_value', 'tax_rule',
@@ -1900,7 +1897,6 @@ class InlineInvoiceLineSerializer(I18nAwareModelSerializer):
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")
tax_rate = CompatDecimalField(max_digits=7, decimal_places=4)
class Meta:
model = InvoiceLine
@@ -1984,7 +1980,6 @@ class BlockedTicketSecretSerializer(I18nAwareModelSerializer):
class TransactionSerializer(I18nAwareModelSerializer):
order = serializers.SlugRelatedField(slug_field="code", read_only=True)
tax_rate = CompatDecimalField(max_digits=7, decimal_places=4)
class Meta:
model = Transaction

View File

@@ -28,5 +28,6 @@ from .items import * # noqa
from .json import * # noqa
from .mail import * # noqa
from .orderlist import * # noqa
from .relevant_orderlist import * # noqa
from .reusablemedia import * # noqa
from .waitinglist import * # noqa

View File

@@ -89,7 +89,7 @@ class OrderListExporter(MultiSheetListExporter):
description = gettext_lazy('Download a spreadsheet of all orders. The spreadsheet will include three sheets, one '
'with a line for every order, one with a line for every order position, and one with '
'a line for every additional fee charged in an order.')
featured = True
featured = False
repeatable_read = False
@cached_property

File diff suppressed because it is too large Load Diff

View File

@@ -1,48 +0,0 @@
# Generated by Django 5.2.12 on 2026-04-15 20:10
from decimal import Decimal
from django.db import migrations, models
import pretix.helpers.models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0298_pluggable_permissions'),
]
operations = [
migrations.AlterField(
model_name='cartposition',
name='tax_rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, default=Decimal('0'), max_digits=7),
),
migrations.AlterField(
model_name='invoiceline',
name='tax_rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, default=Decimal('0'), max_digits=7),
),
migrations.AlterField(
model_name='orderfee',
name='tax_rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, max_digits=7),
),
migrations.AlterField(
model_name='orderposition',
name='tax_rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, max_digits=7),
),
migrations.AlterField(
model_name='transaction',
name='tax_rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, max_digits=7),
),
migrations.AlterField(
model_name='taxrule',
name='rate',
field=pretix.helpers.models.NormalizedDecimalField(decimal_places=4, max_digits=7),
),
]

View File

@@ -49,7 +49,6 @@ from django_scopes import ScopedManager
from pretix.base.settings import COUNTRIES_WITH_STATE_IN_ADDRESS
from pretix.helpers.countries import FastCountryField
from pretix.helpers.models import NormalizedDecimalField
def invoice_filename(instance, filename: str) -> str:
@@ -451,7 +450,7 @@ class InvoiceLine(models.Model):
description = models.TextField()
gross_value = models.DecimalField(max_digits=13, decimal_places=2)
tax_value = models.DecimalField(max_digits=13, decimal_places=2, default=Decimal('0.00'))
tax_rate = NormalizedDecimalField(max_digits=7, decimal_places=4, default=Decimal('0'))
tax_rate = models.DecimalField(max_digits=7, decimal_places=2, default=Decimal('0.00'))
tax_name = models.CharField(max_length=190)
tax_code = models.CharField(max_length=190, null=True, blank=True)
subevent = models.ForeignKey('SubEvent', null=True, blank=True, on_delete=models.PROTECT)

View File

@@ -87,7 +87,6 @@ from pretix.base.timemachine import time_machine_now
from ...helpers import OF_SELF
from ...helpers.countries import CachedCountries, FastCountryField
from ...helpers.models import NormalizedDecimalField
from ...helpers.names import build_name
from ...testutils.middleware import debugflags_var
from ._transactions import (
@@ -2335,8 +2334,8 @@ class OrderFee(RoundingCorrectionMixin, models.Model):
)
description = models.CharField(max_length=190, blank=True)
internal_type = models.CharField(max_length=255, blank=True)
tax_rate = NormalizedDecimalField(
max_digits=7, decimal_places=4,
tax_rate = models.DecimalField(
max_digits=7, decimal_places=2,
verbose_name=_('Tax rate')
)
tax_rule = models.ForeignKey(
@@ -2534,8 +2533,8 @@ class OrderPosition(AbstractPosition):
max_digits=13, decimal_places=2, null=True, blank=True,
)
tax_rate = NormalizedDecimalField(
max_digits=7, decimal_places=4,
tax_rate = models.DecimalField(
max_digits=7, decimal_places=2,
verbose_name=_('Tax rate')
)
tax_rule = models.ForeignKey(
@@ -3053,8 +3052,8 @@ class Transaction(models.Model):
price_includes_rounding_correction = models.DecimalField(
max_digits=13, decimal_places=2, default=Decimal("0.00")
)
tax_rate = NormalizedDecimalField(
max_digits=7, decimal_places=4,
tax_rate = models.DecimalField(
max_digits=7, decimal_places=2,
verbose_name=_('Tax rate')
)
tax_rule = models.ForeignKey(
@@ -3169,8 +3168,8 @@ class CartPosition(AbstractPosition):
verbose_name=_("Limit for extending expiration date"),
null=True
)
tax_rate = NormalizedDecimalField(
max_digits=7, decimal_places=4, default=Decimal('0'),
tax_rate = models.DecimalField(
max_digits=7, decimal_places=2, default=Decimal('0.00'),
verbose_name=_('Tax rate')
)
tax_code = models.CharField(

View File

@@ -40,7 +40,6 @@ from pretix.base.decimal import round_decimal
from pretix.base.models.base import LoggedModel
from pretix.base.templatetags.money import money_filter
from pretix.helpers.countries import FastCountryField
from pretix.helpers.models import NormalizedDecimalField
class TaxedPrice:
@@ -336,9 +335,9 @@ class TaxRule(LoggedModel):
max_length=190,
choices=TAX_CODE_LISTS,
)
rate = NormalizedDecimalField(
max_digits=7,
decimal_places=4,
rate = models.DecimalField(
max_digits=10,
decimal_places=2,
validators=[
MaxValueValidator(
limit_value=Decimal("100.00"),

View File

@@ -26,8 +26,6 @@ from babel.numbers import format_currency
from django import template
from django.conf import settings
from django.template.defaultfilters import floatformat
from django.utils import formats
from django.utils.safestring import mark_safe
from pretix.base.i18n import get_babel_locale
@@ -84,19 +82,3 @@ def money_numberfield_filter(value: Decimal, arg=''):
places = settings.CURRENCY_PLACES.get(arg, 2)
return str(value.quantize(Decimal('1') / 10 ** places, ROUND_HALF_UP))
@register.filter(is_safe=True)
def tax_rate_format(number):
"""
Display a Decimal to its significant decimal places, used for tax rates.
"""
assert isinstance(number, Decimal)
return mark_safe(
formats.number_format(
number.normalize(),
-number.as_tuple().exponent,
use_l10n=True,
force_grouping=False,
)
)

View File

@@ -156,11 +156,11 @@
<br/>
<small class="text-muted">
{% if not i.tax_rule.price_includes_tax %}
{% blocktrans trimmed with rate=i.tax_rule.rate|tax_rate_format taxname=i.tax_rule.name %}
{% blocktrans trimmed with rate=i.tax_rule.rate|floatformat:-2 taxname=i.tax_rule.name %}
<strong>plus</strong> {{ rate }}% {{ taxname }}
{% endblocktrans %}
{% else %}
{% blocktrans trimmed with rate=i.tax_rule.rate|tax_rate_format taxname=i.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=i.tax_rule.rate|floatformat:-2 taxname=i.tax_rule.name|default:s_taxes %}
incl. {{ rate }}% {{ taxname }}
{% endblocktrans %}
{% endif %}

View File

@@ -670,7 +670,7 @@
{% if line.tax_rate %}
<br/>
<small>
{% blocktrans trimmed with rate=line.tax_rate|tax_rate_format taxname=line.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=line.tax_rate|floatformat:-2 taxname=line.tax_rule.name|default:s_taxes %}
<strong>plus</strong> {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -680,7 +680,7 @@
{% if line.tax_rate and line.price %}
<br/>
<small>
{% blocktrans trimmed with rate=line.tax_rate|tax_rate_format taxname=line.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=line.tax_rate|floatformat:-2 taxname=line.tax_rule.name|default:s_taxes %}
incl. {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -720,7 +720,7 @@
{% if fee.tax_rate %}
<br/>
<small>
{% blocktrans trimmed with rate=fee.tax_rate|tax_rate_format taxname=fee.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=fee.tax_rate|floatformat:-2 taxname=fee.tax_rule.name|default:s_taxes %}
<strong>plus</strong> {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -730,7 +730,7 @@
{% if fee.tax_rate %}
<br/>
<small>
{% blocktrans trimmed with rate=fee.tax_rate|tax_rate_format taxname=fee.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=fee.tax_rate|floatformat:-2 taxname=fee.tax_rule.name|default:s_taxes %}
incl. {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>

View File

@@ -20,11 +20,9 @@
# <https://www.gnu.org/licenses/>.
#
import copy
from decimal import Decimal
from django.core.files import File
from django.db import models
from django.db.models.fields import DecimalField
class Thumbnail(models.Model):
@@ -56,33 +54,3 @@ def flatten_choices(choices):
yield from label_or_nested
else:
yield value_or_group, label_or_nested
def _normalize_decimal(d: Decimal) -> Decimal:
"""
Strips trailing zeros, e.g.
20.000 → 20
20.010 → 20.01
20.100 → 20.1
But unlike of Decimal.normalize(), 20.000 will not become 2e+1. Very small decimals might still be represented
in scientific notation when printed.
"""
normalized = d.normalize()
sign, digit, exponent = normalized.as_tuple()
if exponent > 0:
return normalized.quantize(1)
return normalized
class NormalizedDecimalField(DecimalField):
"""
Variant of DecimalField that never outputs the trailing zeros, so we always have normalized decimals internally.
Use this only for fields where the trailing zeros are pointless (e.g. percentages), not for monetary amounts.
"""
def from_db_value(self, value, expression, connection):
if value is not None:
value = _normalize_decimal(value)
return value

View File

@@ -846,7 +846,7 @@ msgstr "Details der Bestellposition"
#: pretix/base/datasync/sourcefields.py:129
msgid "Attendee details"
msgstr "Details Teilnehmer*in"
msgstr "Details Teilnehmer"
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:185
@@ -908,13 +908,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
msgid "Attendee name"
msgstr "Name Teilnehmer*in"
msgstr "Name Teilnehmer"
#: pretix/base/datasync/sourcefields.py:187
#: pretix/base/datasync/sourcefields.py:604
#: pretix/base/datasync/sourcefields.py:628
msgid "Attendee"
msgstr "Teilnehmer*in"
msgstr "Teilnehmer"
#: pretix/base/datasync/sourcefields.py:207
#: pretix/base/exporters/orderlist.py:647 pretix/base/forms/questions.py:699
@@ -925,11 +925,11 @@ msgstr "Teilnehmer*in"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
msgid "Attendee email"
msgstr "E-Mail Teilnehmer*in"
msgstr "E-Mail Teilnehmer"
#: pretix/base/datasync/sourcefields.py:219
msgid "Attendee or order email"
msgstr "E-Mail Teilnehmer*in oder Bestellung"
msgstr "E-Mail Teilnehmer oder Bestellung"
#: pretix/base/datasync/sourcefields.py:232
#: pretix/base/exporters/orderlist.py:648 pretix/base/pdf.py:188
@@ -939,23 +939,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
msgid "Attendee company"
msgstr "Teilnehmer*innen-Firma"
msgstr "Teilnehmer-Firma"
#: pretix/base/datasync/sourcefields.py:241
msgid "Attendee address street"
msgstr "Teilnehmer*innen-Adresse: Straße"
msgstr "Teilnehmer-Adresse: Straße"
#: pretix/base/datasync/sourcefields.py:250
msgid "Attendee address ZIP code"
msgstr "Teilnehmer*innen-Adresse: PLZ"
msgstr "Teilnehmer-Adresse: PLZ"
#: pretix/base/datasync/sourcefields.py:259
msgid "Attendee address city"
msgstr "Teilnehmer*innen-Adresse: Stadt"
msgstr "Teilnehmer-Adresse: Stadt"
#: pretix/base/datasync/sourcefields.py:268
msgid "Attendee address country"
msgstr "Teilnehmer*innen-Adresse: Land"
msgstr "Teilnehmer-Adresse: Land"
#: pretix/base/datasync/sourcefields.py:279
#: pretix/base/exporters/orderlist.py:690 pretix/base/pdf.py:346
@@ -1233,7 +1233,7 @@ msgid ""
"Download a ZIP file including all files that have been uploaded by your "
"customers while creating an order."
msgstr ""
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
"Antwort auf eine Frage hochgeladen wurden."
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:628
@@ -2191,6 +2191,10 @@ msgstr "Ohne gültige Mitgliedschaft verstecken"
msgid "Order data"
msgstr "Bestelldaten"
#: pretix/base/exporters/relevant_orderlist.py:86
msgid "Order data (sorted by relevance)"
msgstr "Bestelldaten (nach Relevanz sortiert)"
#: pretix/base/exporters/json.py:53
msgid ""
"Download a structured JSON representation of all orders. This might be "
@@ -2208,8 +2212,8 @@ msgid ""
"Download a text file with all email addresses collected either from buyers "
"or from ticket holders."
msgstr ""
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
"Ticketinhaber*innen eingesammelt wurden."
"Textdatei mit allen E-Mail-Adressen, die von Käufern und "
"Ticketinhaber eingesammelt wurden."
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
#: pretix/plugins/reports/exporters.py:685
@@ -2227,6 +2231,18 @@ msgstr ""
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
"Gebühr."
#: pretix/base/exporters/relevant_orderlist.py:88
msgid ""
"Download a spreadsheet of all orders. The spreadsheet will include three "
"sheets, one with a line for every order, one with a line for every order "
"position, and one with a line for every additional fee charged in an "
"order. The most relevant data is in the first columns of the tables."
msgstr ""
"Tabelle (Excel oder CSV) mit allen Bestellungen. Das erste Tabellenblatt "
"enthält eine Zeile für jede Bestellung, das zweite eine Zeile für jede "
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
"Gebühr. Die relevantesten Daten sind in den ersten Spalten der Tabellen."
#: pretix/base/exporters/orderlist.py:102 pretix/base/models/orders.py:336
#: pretix/base/permissions.py:228 pretix/control/navigation.py:267
#: pretix/control/navigation.py:387
@@ -4181,7 +4197,7 @@ msgstr "Bitte wählen Sie einen gültigen Staat aus."
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
msgid "Attendee email address"
msgstr "Teilnehmer*innen-E-Mail-Adresse"
msgstr "Teilnehmer-E-Mail-Adresse"
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
@@ -4193,7 +4209,7 @@ msgstr "Teilnehmer*innen-E-Mail-Adresse"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
msgid "Attendee address"
msgstr "Teilnehmer*innen-Adresse"
msgstr "Teilnehmer-Adresse"
#: pretix/base/modelimport_orders.py:445
msgid "State"
@@ -8056,7 +8072,7 @@ msgstr "Musterfirma GmbH"
#: pretix/base/pdf.py:193
msgid "Full attendee address"
msgstr "Volle Teilnehmer*innen-Adresse"
msgstr "Volle Teilnehmer-Adresse"
#: pretix/base/pdf.py:194
msgid ""
@@ -8074,23 +8090,23 @@ msgstr ""
#: pretix/base/pdf.py:198
msgid "Attendee street"
msgstr "Teilnehmer*innen-Straße"
msgstr "Teilnehmer-Straße"
#: pretix/base/pdf.py:203
msgid "Attendee ZIP code"
msgstr "Teilnehmer*innen-PLZ"
msgstr "Teilnehmer-PLZ"
#: pretix/base/pdf.py:208
msgid "Attendee city"
msgstr "Teilnehmer*innen-Stadt"
msgstr "Teilnehmer-Stadt"
#: pretix/base/pdf.py:213
msgid "Attendee state"
msgstr "Teilnehmer*innen-Bundesstaat"
msgstr "Teilnehmer-Bundesstaat"
#: pretix/base/pdf.py:218
msgid "Attendee country"
msgstr "Teilnehmer*innen-Land"
msgstr "Teilnehmer-Land"
#: pretix/base/pdf.py:230
msgid "Pseudonymization ID (lead scanning)"
@@ -8387,7 +8403,7 @@ msgstr "Herr Mustermann"
#: pretix/plugins/ticketoutputpdf/exporters.py:99
#, python-brace-format
msgid "Attendee name: {part}"
msgstr "Teilnehmer*innenname: {part}"
msgstr "Teilnehmername: {part}"
#: pretix/base/pdf.py:695
msgid "Invoice address name for salutation"
@@ -9295,7 +9311,7 @@ msgstr "Veranstaltungsort: {location}"
#, python-brace-format
msgctxt "invoice"
msgid "Attendee: {name}"
msgstr "Teilnehmer*in: {name}"
msgstr "Teilnehmer: {name}"
#: pretix/base/services/invoices.py:293 pretix/plugins/reports/exporters.py:308
#, python-brace-format
@@ -10151,7 +10167,7 @@ msgstr ""
#: pretix/base/settings.py:362
msgid "Hide prices on attendee ticket page"
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
#: pretix/base/settings.py:363
msgid ""
@@ -10161,13 +10177,13 @@ msgid ""
"price."
msgstr ""
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
"Person, welche die Tickets kauft, sieht den Preis."
#: pretix/base/settings.py:381
msgid "Ask for attendee names"
msgstr "Namen der Teilnehmer*innen erfragen"
msgstr "Namen der Teilnehmer erfragen"
#: pretix/base/settings.py:382
msgid "Ask for a name for all personalized tickets."
@@ -10176,11 +10192,11 @@ msgstr ""
#: pretix/base/settings.py:391
msgid "Require attendee names"
msgstr "Namen der Teilnehmer*innen erfordern"
msgstr "Namen der Teilnehmer erfordern"
#: pretix/base/settings.py:392
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/base/settings.py:402
msgid "Ask for email addresses per ticket"
@@ -10711,8 +10727,8 @@ msgid ""
"but no indication of missing payment will be visible on the ticket pages of "
"attendees who did not buy the ticket themselves."
msgstr ""
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
"aber Teilnehmern, die ihr Ticket nicht selbst gekauft haben, werden "
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
#: pretix/base/settings.py:1107
@@ -11210,7 +11226,7 @@ msgstr ""
#: pretix/base/settings.py:1750
msgid "Show number of check-ins to customer"
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
msgstr "Zeige Anzahl der Check-ins für Kunden an"
#: pretix/base/settings.py:1751
msgid ""
@@ -11221,12 +11237,12 @@ msgid ""
"failed scans will not be counted, and the user will not see the different "
"check-in lists."
msgstr ""
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
#: pretix/base/settings.py:1764
msgid "Allow users to download tickets"
@@ -11407,7 +11423,7 @@ msgstr ""
#: pretix/base/settings.py:1927 pretix/base/settings.py:1936
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
#: pretix/base/settings.py:1931
msgid "Allow customers to modify their information"
@@ -11515,7 +11531,7 @@ msgstr ""
#: pretix/base/settings.py:2037
msgid "Allow individual attendees to change their ticket"
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
msgstr "Erlaubt einzelnen Teilnehmern ihr Ticket zu ändern"
#: pretix/base/settings.py:2038
msgid ""
@@ -11527,7 +11543,7 @@ msgid ""
msgstr ""
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
"vorgenommen werden."
@@ -11823,7 +11839,7 @@ msgid ""
"people."
msgstr ""
"Sie können dieses Feld benutzen, um zusätzliche Informationen mit Ihren "
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
@@ -12064,8 +12080,8 @@ msgstr ""
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
@@ -15403,7 +15419,7 @@ msgstr "Check-in-Status"
#: pretix/control/forms/filter.py:2041
#: pretix/plugins/checkinlists/exporters.py:108
msgid "All attendees"
msgstr "Alle Teilnehmer*innen"
msgstr "Alle Teilnehmer"
#: pretix/control/forms/filter.py:2042
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
@@ -15987,7 +16003,7 @@ msgid ""
"people over 65. This ticket includes access to all parts of the event, "
"except the VIP area."
msgstr ""
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -16301,7 +16317,7 @@ msgstr ""
#: pretix/control/forms/orders.py:167 pretix/control/forms/orders.py:226
#: pretix/control/forms/orders.py:240
msgid "Notify customer by email"
msgstr "Kund*in per E-Mail benachrichtigen"
msgstr "Kunde per E-Mail benachrichtigen"
#: pretix/control/forms/orders.py:174
msgid "Keep a cancellation fee of"
@@ -17860,7 +17876,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
#: pretix/control/logdisplay.py:554
msgid "A custom email has been sent to an attendee."
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
msgstr "Eine individuelle E-Mail wurde an einen Teilnehmer verschickt."
#: pretix/control/logdisplay.py:555
msgid ""
@@ -19577,7 +19593,7 @@ msgstr "Terminal-ID"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
msgid "Card holder"
msgstr "Karteninhaber*in"
msgstr "Karteninhaber"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
msgid "Card expiration"
@@ -19882,7 +19898,7 @@ msgstr "CSV"
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
msgid "No attendee record was found."
msgstr "Keine passenden Teilnehmer*innen gefunden."
msgstr "Keine passenden Teilnehmer gefunden."
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
@@ -22704,7 +22720,7 @@ msgid ""
"Only purchases of such products will be considered \"attendees\" for most "
"statistical purposes or within some plugins."
msgstr ""
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
#: pretix/control/templates/pretixcontrol/item/create.html:39
@@ -22783,7 +22799,7 @@ msgid ""
"The system will not ask for a name or other attendee details. This only "
"affects system-provided fields, you can still add your own questions."
msgstr ""
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
"können trotzdem hinzugefügt werden."
@@ -25056,7 +25072,7 @@ msgstr "Sonstige Datenexporte"
#: pretix/control/templates/pretixcontrol/orders/export.html:107
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
msgid "Recommended for new users"
msgstr "Empfohlen für neue Benutzer*innen"
msgstr "Empfohlen für neue Benutzer"
#: pretix/control/templates/pretixcontrol/orders/export.html:120
#: pretix/control/templates/pretixcontrol/organizers/export.html:120
@@ -26034,7 +26050,7 @@ msgstr "Domains"
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
msgid "This dialog is intended for advanced users."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
msgid ""
@@ -28439,7 +28455,7 @@ msgid ""
"customers. This way, customers will not be able to discover the waiting list."
msgstr ""
"Entsprechend Ihrer Veranstaltungseinstellungen werden ausverkaufte Produkte "
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
"finden können."
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:38
@@ -28749,11 +28765,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
#: pretix/control/views/dashboards.py:115
msgid "Attendees (ordered)"
msgstr "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/control/views/dashboards.py:125
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/control/views/dashboards.py:137
#, python-brace-format
@@ -30822,7 +30838,7 @@ msgstr "PDF-Sammlungen"
#: pretix/plugins/badges/exporters.py:423
msgid "Download all attendee badges as one large PDF for printing."
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
#: pretix/plugins/badges/exporters.py:444
#: pretix/plugins/ticketoutputpdf/exporters.py:80
@@ -31097,7 +31113,7 @@ msgstr "Anderes Bankkonto"
#: pretix/plugins/banktransfer/payment.py:85
msgid "Name of account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py:87
msgid ""
@@ -31239,7 +31255,7 @@ msgstr "Bitte überweisen Sie den vollen Betrag auf das folgende Bankkonto:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
msgid "Account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py:304
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
@@ -31834,7 +31850,7 @@ msgid ""
"Download a spreadsheet with all attendees that are included in a check-in "
"list."
msgstr ""
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
"Liste zutrittsberechtigt sind."
#: pretix/plugins/checkinlists/exporters.py:501
@@ -33013,7 +33029,7 @@ msgstr "Geplante E-Mails"
#: pretix/plugins/sendmail/signals.py:122
msgid "Mass email was sent to customers or attendees."
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py:123
msgid "Mass email was sent to waiting list entries."
@@ -33045,7 +33061,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
#: pretix/plugins/sendmail/signals.py:142
msgid "A scheduled email was sent to a ticket holder"
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py:143
msgid "An email rule was deleted"
@@ -33078,7 +33094,7 @@ msgstr "Alle nicht eingecheckten Kunden"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
msgid "Attendee contact addresses"
msgstr "Teilnehmer*innen-E-Mail-Adressen"
msgstr "Teilnehmer-E-Mail-Adressen"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
msgid "All contact addresses"
@@ -33237,14 +33253,14 @@ msgstr ""
#: pretix/plugins/sendmail/views.py:250
msgid "Orders or attendees"
msgstr "Bestellungen oder Teilnehmer*innen"
msgstr "Bestellungen oder Teilnehmer"
#: pretix/plugins/sendmail/views.py:251
msgid ""
"Send an email to every customer, or to every person a ticket has been "
"purchased for, or a combination of both."
msgstr ""
"Senden Sie eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen "
"Senden Sie eine E-Mail an alle Ticketkäufer, alle Ticketinhaber "
"oder eine Kombination aus beiden Gruppen."
#: pretix/plugins/sendmail/views.py:417
@@ -33826,23 +33842,23 @@ msgstr "SEPA-Lastschrift"
#: pretix/plugins/stripe/payment.py:1277
msgid "Account Holder Name"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/stripe/payment.py:1282
msgid "Account Holder Street"
msgstr "Straße (Kontoinhaber*in)"
msgstr "Straße (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1294
msgid "Account Holder Postal Code"
msgstr "PLZ (Kontoinhaber*in)"
msgstr "PLZ (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1306
msgid "Account Holder City"
msgstr "Stadt (Kontoinhaber*in)"
msgstr "Stadt (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1318
msgid "Account Holder Country"
msgstr "Land (Kontoinhaber*in)"
msgstr "Land (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1362
msgid "Affirm via Stripe"
@@ -34293,7 +34309,7 @@ msgstr "MOTO"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:64
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:67
msgid "Payer name"
msgstr "Name des Zahlenden"
msgstr "Name des Zahlers"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:91
msgid "Payment receipt"
@@ -35686,7 +35702,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
msgid "No attendee name provided"
msgstr "Name der teilnehmenden Person nicht angegeben"
msgstr "Name des Teilnehmenrs nicht angegeben"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
msgid "The image you previously uploaded"
@@ -37448,12 +37464,12 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
#: pretix/presale/views/customer.py:386
msgid "Attendee profiles"
msgstr "Teilnehmer*innen-Profile"
msgstr "Teilnehmer-Profile"
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
msgid "You dont have any attendee profiles in your account yet."
msgstr ""
"In Ihrem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
"In Ihrem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
msgid "Registration"
@@ -39041,7 +39057,7 @@ msgstr "Kosovo"
#~ "This plugin allows you to generate badges or name tags for your attendees."
#~ msgstr ""
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
#~ "Teilnehmer*innen zu erstellen."
#~ "Teilnehmer zu erstellen."
#~ msgid "This plugin allows you to receive payments via PayPal"
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"

View File

@@ -848,7 +848,7 @@ msgstr "Details der Bestellposition"
#: pretix/base/datasync/sourcefields.py:129
msgid "Attendee details"
msgstr "Details Teilnehmer*in"
msgstr "Details Teilnehmer"
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:185
@@ -910,13 +910,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
msgid "Attendee name"
msgstr "Name Teilnehmer*in"
msgstr "Name Teilnehmer"
#: pretix/base/datasync/sourcefields.py:187
#: pretix/base/datasync/sourcefields.py:604
#: pretix/base/datasync/sourcefields.py:628
msgid "Attendee"
msgstr "Teilnehmer*in"
msgstr "Teilnehmer"
#: pretix/base/datasync/sourcefields.py:207
#: pretix/base/exporters/orderlist.py:647 pretix/base/forms/questions.py:699
@@ -927,11 +927,11 @@ msgstr "Teilnehmer*in"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
msgid "Attendee email"
msgstr "E-Mail Teilnehmer*in"
msgstr "E-Mail Teilnehmer"
#: pretix/base/datasync/sourcefields.py:219
msgid "Attendee or order email"
msgstr "E-Mail Teilnehmer*in oder Bestellung"
msgstr "E-Mail Teilnehmer oder Bestellung"
#: pretix/base/datasync/sourcefields.py:232
#: pretix/base/exporters/orderlist.py:648 pretix/base/pdf.py:188
@@ -941,23 +941,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
msgid "Attendee company"
msgstr "Teilnehmer*innen-Firma"
msgstr "Teilnehmer-Firma"
#: pretix/base/datasync/sourcefields.py:241
msgid "Attendee address street"
msgstr "Teilnehmer*innen-Adresse: Straße"
msgstr "Teilnehmer-Adresse: Straße"
#: pretix/base/datasync/sourcefields.py:250
msgid "Attendee address ZIP code"
msgstr "Teilnehmer*innen-Adresse: PLZ"
msgstr "Teilnehmer-Adresse: PLZ"
#: pretix/base/datasync/sourcefields.py:259
msgid "Attendee address city"
msgstr "Teilnehmer*innen-Adresse: Stadt"
msgstr "Teilnehmer-Adresse: Stadt"
#: pretix/base/datasync/sourcefields.py:268
msgid "Attendee address country"
msgstr "Teilnehmer*innen-Adresse: Land"
msgstr "Teilnehmer-Adresse: Land"
#: pretix/base/datasync/sourcefields.py:279
#: pretix/base/exporters/orderlist.py:690 pretix/base/pdf.py:346
@@ -1235,7 +1235,7 @@ msgid ""
"Download a ZIP file including all files that have been uploaded by your "
"customers while creating an order."
msgstr ""
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
"Antwort auf eine Frage hochgeladen wurden."
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:628
@@ -2210,8 +2210,8 @@ msgid ""
"Download a text file with all email addresses collected either from buyers "
"or from ticket holders."
msgstr ""
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
"Ticketinhaber*innen eingesammelt wurden."
"Textdatei mit allen E-Mail-Adressen, die von Käufer und "
"Ticketinhaber eingesammelt wurden."
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
#: pretix/plugins/reports/exporters.py:685
@@ -4183,7 +4183,7 @@ msgstr "Bitte wähle einen gültigen Staat aus."
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
msgid "Attendee email address"
msgstr "Teilnehmer*innen-E-Mail-Adresse"
msgstr "Teilnehmer-E-Mail-Adresse"
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
@@ -4195,7 +4195,7 @@ msgstr "Teilnehmer*innen-E-Mail-Adresse"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
msgid "Attendee address"
msgstr "Teilnehmer*innen-Adresse"
msgstr "Teilnehmer-Adresse"
#: pretix/base/modelimport_orders.py:445
msgid "State"
@@ -8049,7 +8049,7 @@ msgstr "Musterfirma"
#: pretix/base/pdf.py:193
msgid "Full attendee address"
msgstr "Volle Teilnehmer*innen-Adresse"
msgstr "Volle Teilnehmer-Adresse"
#: pretix/base/pdf.py:194
msgid ""
@@ -8067,23 +8067,23 @@ msgstr ""
#: pretix/base/pdf.py:198
msgid "Attendee street"
msgstr "Teilnehmer*innen-Straße"
msgstr "Teilnehmer-Straße"
#: pretix/base/pdf.py:203
msgid "Attendee ZIP code"
msgstr "Teilnehmer*innen-PLZ"
msgstr "Teilnehmer-PLZ"
#: pretix/base/pdf.py:208
msgid "Attendee city"
msgstr "Teilnehmer*innen-Stadt"
msgstr "Teilnehmer-Stadt"
#: pretix/base/pdf.py:213
msgid "Attendee state"
msgstr "Teilnehmer*innen-Bundesstaat"
msgstr "Teilnehmer-Bundesstaat"
#: pretix/base/pdf.py:218
msgid "Attendee country"
msgstr "Teilnehmer*innen-Land"
msgstr "Teilnehmer-Land"
#: pretix/base/pdf.py:230
msgid "Pseudonymization ID (lead scanning)"
@@ -8380,7 +8380,7 @@ msgstr "Herr Mustermann"
#: pretix/plugins/ticketoutputpdf/exporters.py:99
#, python-brace-format
msgid "Attendee name: {part}"
msgstr "Teilnehmer*innenname: {part}"
msgstr "Teilnehmer: {part}"
#: pretix/base/pdf.py:695
msgid "Invoice address name for salutation"
@@ -9285,7 +9285,7 @@ msgstr "Veranstaltungsort: {location}"
#, python-brace-format
msgctxt "invoice"
msgid "Attendee: {name}"
msgstr "Teilnehmer*in: {name}"
msgstr "Teilnehmer: {name}"
#: pretix/base/services/invoices.py:293 pretix/plugins/reports/exporters.py:308
#, python-brace-format
@@ -10139,7 +10139,7 @@ msgstr ""
#: pretix/base/settings.py:362
msgid "Hide prices on attendee ticket page"
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
#: pretix/base/settings.py:363
msgid ""
@@ -10149,13 +10149,13 @@ msgid ""
"price."
msgstr ""
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
"Person, welche die Tickets kauft, sieht den Preis."
#: pretix/base/settings.py:381
msgid "Ask for attendee names"
msgstr "Namen der Teilnehmer*innen erfragen"
msgstr "Namen der Teilnehmer erfragen"
#: pretix/base/settings.py:382
msgid "Ask for a name for all personalized tickets."
@@ -10164,11 +10164,11 @@ msgstr ""
#: pretix/base/settings.py:391
msgid "Require attendee names"
msgstr "Namen der Teilnehmer*innen erfordern"
msgstr "Namen der Teilnehmer erfordern"
#: pretix/base/settings.py:392
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/base/settings.py:402
msgid "Ask for email addresses per ticket"
@@ -10190,7 +10190,7 @@ msgstr ""
"aktivierst, fragt das System zusätzlich nach einzelnen E-Mail-Adressen für "
"jedes personalisierte Ticket in der Bestellung. Dies könnte z.B. nützlich "
"sein, wenn du auch im Falle von Gruppenbestellungen individuelle Adressen "
"von jeder Teilnehmer*in benötigst. pretix sendet die Bestellbestätigung "
"von jedem Teilnehmer benötigst. pretix sendet die Bestellbestätigung "
"standardmäßig nach wie vor nur an die primäre Adresse, dies kann jedoch in "
"den E-Mail-Einstellungen angepasst werden."
@@ -10698,8 +10698,8 @@ msgid ""
"but no indication of missing payment will be visible on the ticket pages of "
"attendees who did not buy the ticket themselves."
msgstr ""
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
"aber Teilnehmer, die ihr Ticket nicht selbst gekauft haben, werden "
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
#: pretix/base/settings.py:1107
@@ -11197,7 +11197,7 @@ msgstr ""
#: pretix/base/settings.py:1750
msgid "Show number of check-ins to customer"
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
msgstr "Zeige Anzahl der Check-ins für Kunden an"
#: pretix/base/settings.py:1751
msgid ""
@@ -11208,12 +11208,12 @@ msgid ""
"failed scans will not be counted, and the user will not see the different "
"check-in lists."
msgstr ""
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
#: pretix/base/settings.py:1764
msgid "Allow users to download tickets"
@@ -11394,7 +11394,7 @@ msgstr ""
#: pretix/base/settings.py:1927 pretix/base/settings.py:1936
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
#: pretix/base/settings.py:1931
msgid "Allow customers to modify their information"
@@ -11502,7 +11502,7 @@ msgstr ""
#: pretix/base/settings.py:2037
msgid "Allow individual attendees to change their ticket"
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
msgstr "Erlaubt einzelnen Teilnehmer ihr Ticket zu ändern"
#: pretix/base/settings.py:2038
msgid ""
@@ -11514,7 +11514,7 @@ msgid ""
msgstr ""
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
"vorgenommen werden."
@@ -11698,7 +11698,7 @@ msgstr "Kontakt-E-Mail"
#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900
msgid "We'll show this publicly to allow attendees to contact you."
msgstr ""
"Wir werden diese Adresse veröffentlichen um Teilnehmer*innen zu ermöglichen, "
"Wir werden diese Adresse veröffentlichen um Teilnehmern zu ermöglichen, "
"dich zu kontaktieren."
#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892
@@ -11810,7 +11810,7 @@ msgid ""
"people."
msgstr ""
"Du kannst dieses Feld benutzen um zusätzliche Informationen mit deinen "
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
@@ -12050,8 +12050,8 @@ msgstr ""
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
@@ -13314,7 +13314,7 @@ msgstr ""
msgid ""
"You cannot require specifying attendee names if you do not ask for them."
msgstr ""
"Du kannst die Angabe von Teilnehmer*innennamen nur erfordern, wenn auch nach "
"Du kannst die Angabe von Teilnehmernamen nur erfordern, wenn auch nach "
"Namen gefragt wird."
#: pretix/base/settings.py:4129
@@ -14979,11 +14979,11 @@ msgstr "Ticket-Downloads"
#: pretix/control/forms/event.py:1882
msgid "Your customers will be able to download their tickets in PDF format."
msgstr ""
"Die Teilnehmer*innen werden ihre Tickets im PDF-Format herunterladen können."
"Die Teilnehmer werden ihre Tickets im PDF-Format herunterladen können."
#: pretix/control/forms/event.py:1886
msgid "Require all attendees to fill in their names"
msgstr "Erfordere, dass alle Teilnehmer*innen ihre Namen ausfüllen"
msgstr "Erfordere, dass alle Teilnehmer ihre Namen ausfüllen"
#: pretix/control/forms/event.py:1887
msgid ""
@@ -15019,7 +15019,7 @@ msgid ""
"then import your bank statements to process the payments within pretix, or "
"mark them as paid manually."
msgstr ""
"Deine Teilnehmer*innen werden angewiesen, das Geld direkt auf dein Bankkonto "
"Deine Teilnehmer werden angewiesen, das Geld direkt auf dein Bankkonto "
"zu überweisen. Du kannst dann deinen Kontoauszug in pretix importieren, um "
"Zahlungen zuzuweisen, oder die Bestellungen manuell als bezahlt markieren."
@@ -15380,7 +15380,7 @@ msgstr "Check-in-Status"
#: pretix/control/forms/filter.py:2041
#: pretix/plugins/checkinlists/exporters.py:108
msgid "All attendees"
msgstr "Alle Teilnehmer*innen"
msgstr "Alle Teilnehmer"
#: pretix/control/forms/filter.py:2042
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
@@ -15964,7 +15964,7 @@ msgid ""
"people over 65. This ticket includes access to all parts of the event, "
"except the VIP area."
msgstr ""
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -17837,7 +17837,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
#: pretix/control/logdisplay.py:554
msgid "A custom email has been sent to an attendee."
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer verschickt."
#: pretix/control/logdisplay.py:555
msgid ""
@@ -19553,7 +19553,7 @@ msgstr "Terminal-ID"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
msgid "Card holder"
msgstr "Karteninhaber*in"
msgstr "Karteninhaber"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
msgid "Card expiration"
@@ -19858,7 +19858,7 @@ msgstr "CSV"
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
msgid "No attendee record was found."
msgstr "Keine passenden Teilnehmer*innen gefunden."
msgstr "Keine passenden Teilnehmer gefunden."
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
@@ -21685,7 +21685,7 @@ msgid ""
"provide ways for your attendees to contact you:"
msgstr ""
"Wenn irgendetwas schiefgeht oder unklar ist, empfehlen wir, dass du deinen "
"Teilnehmer*innen die Möglichkeit gibst, dich zu benachrichtigen:"
"Teilnehmer die Möglichkeit gibst, dich zu benachrichtigen:"
#: pretix/control/templates/pretixcontrol/event/settings.html:21
msgid "Basics"
@@ -22673,7 +22673,7 @@ msgid ""
"Only purchases of such products will be considered \"attendees\" for most "
"statistical purposes or within some plugins."
msgstr ""
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
#: pretix/control/templates/pretixcontrol/item/create.html:39
@@ -22752,7 +22752,7 @@ msgid ""
"The system will not ask for a name or other attendee details. This only "
"affects system-provided fields, you can still add your own questions."
msgstr ""
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
"können trotzdem hinzugefügt werden."
@@ -23449,9 +23449,9 @@ msgid ""
"ticket. If you provide food, one example might be to ask your users about "
"dietary requirements."
msgstr ""
"Fragen erlauben deinen Besucher*innen, zusätzliche Informationen zu ihrem "
"Fragen erlauben deinen Besucher, zusätzliche Informationen zu ihrem "
"Ticket auszufüllen. Wenn deine Veranstaltung Verpflegung beinhaltet, "
"könntest du z.B. nach Allergien deiner Teilnehmer*innen fragen."
"könntest du z.B. nach Allergien deiner Teilnehmer fragen."
#: pretix/control/templates/pretixcontrol/items/questions.html:15
msgid "Create a new question"
@@ -23590,7 +23590,7 @@ msgstr ""
"Um deine Produkte verfügbar zu machen, musst du Kontingente anlegen. "
"Kontingente definieren, wie oft ein Produkt verkauft werden darf. Auf diese "
"Art kannst du konfigurieren, ob deine Veranstaltung unbegrenzt viele "
"Teilnehmer*innen aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
"Teilnehmer aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
"ein Produkt zu mehreren Kontingenten hinzufügen, um komplexere Anforderungen "
"abzubilden, z.B. wenn du die Gesamtzahl der Tickets begrenzen willst, aber "
"einen speziellen Ticket-Typ noch stärker begrenzen willst."
@@ -25022,7 +25022,7 @@ msgstr "Sonstige Datenexporte"
#: pretix/control/templates/pretixcontrol/orders/export.html:107
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
msgid "Recommended for new users"
msgstr "Empfohlen für neue Benutzer*innen"
msgstr "Empfohlen für neue Benutzer"
#: pretix/control/templates/pretixcontrol/orders/export.html:120
#: pretix/control/templates/pretixcontrol/organizers/export.html:120
@@ -25999,7 +25999,7 @@ msgstr "Domains"
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
msgid "This dialog is intended for advanced users."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
msgid ""
@@ -28399,7 +28399,7 @@ msgid ""
"customers. This way, customers will not be able to discover the waiting list."
msgstr ""
"Entsprechend deiner Veranstaltungseinstellungen werden ausverkaufte Produkte "
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
"finden können."
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:38
@@ -28708,11 +28708,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
#: pretix/control/views/dashboards.py:115
msgid "Attendees (ordered)"
msgstr "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/control/views/dashboards.py:125
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/control/views/dashboards.py:137
#, python-brace-format
@@ -30777,7 +30777,7 @@ msgstr "PDF-Sammlungen"
#: pretix/plugins/badges/exporters.py:423
msgid "Download all attendee badges as one large PDF for printing."
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
#: pretix/plugins/badges/exporters.py:444
#: pretix/plugins/ticketoutputpdf/exporters.py:80
@@ -31051,7 +31051,7 @@ msgstr "Anderes Bankkonto"
#: pretix/plugins/banktransfer/payment.py:85
msgid "Name of account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py:87
msgid ""
@@ -31193,7 +31193,7 @@ msgstr "Bitte überweise den vollen Betrag auf das folgende Bankkonto:"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
msgid "Account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py:304
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
@@ -31789,7 +31789,7 @@ msgid ""
"Download a spreadsheet with all attendees that are included in a check-in "
"list."
msgstr ""
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
"Liste zutrittsberechtigt sind."
#: pretix/plugins/checkinlists/exporters.py:501
@@ -32965,7 +32965,7 @@ msgstr "Geplante E-Mails"
#: pretix/plugins/sendmail/signals.py:122
msgid "Mass email was sent to customers or attendees."
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py:123
msgid "Mass email was sent to waiting list entries."
@@ -32997,7 +32997,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
#: pretix/plugins/sendmail/signals.py:142
msgid "A scheduled email was sent to a ticket holder"
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
msgstr "Eine automatisierte E-Mail wurde an einen Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py:143
msgid "An email rule was deleted"
@@ -33030,7 +33030,7 @@ msgstr "Alle nicht eingecheckten Kunden"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
msgid "Attendee contact addresses"
msgstr "Teilnehmer*innen-E-Mail-Adressen"
msgstr "Teilnehmer-E-Mail-Adressen"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
msgid "All contact addresses"
@@ -33190,14 +33190,14 @@ msgstr ""
#: pretix/plugins/sendmail/views.py:250
msgid "Orders or attendees"
msgstr "Bestellungen oder Teilnehmer*innen"
msgstr "Bestellungen oder Teilnehmer"
#: pretix/plugins/sendmail/views.py:251
msgid ""
"Send an email to every customer, or to every person a ticket has been "
"purchased for, or a combination of both."
msgstr ""
"Sende eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen oder "
"Sende eine E-Mail an alle Ticketkäufer, alle Ticketinhaber oder "
"eine Kombination aus beiden Gruppen."
#: pretix/plugins/sendmail/views.py:417
@@ -33777,23 +33777,23 @@ msgstr "SEPA-Lastschrift"
#: pretix/plugins/stripe/payment.py:1277
msgid "Account Holder Name"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/stripe/payment.py:1282
msgid "Account Holder Street"
msgstr "Straße (Kontoinhaber*in)"
msgstr "Straße (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1294
msgid "Account Holder Postal Code"
msgstr "PLZ (Kontoinhaber*in)"
msgstr "PLZ (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1306
msgid "Account Holder City"
msgstr "Stadt (Kontoinhaber*in)"
msgstr "Stadt (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1318
msgid "Account Holder Country"
msgstr "Land (Kontoinhaber*in)"
msgstr "Land (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py:1362
msgid "Affirm via Stripe"
@@ -34242,7 +34242,7 @@ msgstr "MOTO"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:64
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:67
msgid "Payer name"
msgstr "Name des Zahlenden"
msgstr "Name des Zahlers"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:91
msgid "Payment receipt"
@@ -35630,7 +35630,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
msgid "No attendee name provided"
msgstr "Name der teilnehmenden Person nicht angegeben"
msgstr "Name des Teilnehmenrs nicht angegeben"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
msgid "The image you previously uploaded"
@@ -37390,12 +37390,12 @@ msgstr "Möchtest das folgende Profil wirklich aus deinem Kundenkonto löschen?"
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
#: pretix/presale/views/customer.py:386
msgid "Attendee profiles"
msgstr "Teilnehmer*innen-Adresse"
msgstr "Teilnehmer-Adresse"
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
msgid "You dont have any attendee profiles in your account yet."
msgstr ""
"In deinem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
"In deinem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
msgid "Registration"
@@ -38928,7 +38928,7 @@ msgstr "Kosovo"
#~ "This plugin allows you to generate badges or name tags for your attendees."
#~ msgstr ""
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
#~ "Teilnehmer*innen zu erstellen."
#~ "Teilnehmer zu erstellen."
#~ msgid "This plugin allows you to receive payments via PayPal"
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
@@ -39506,7 +39506,7 @@ msgstr "Kosovo"
#~ msgstr "Biete Ticket-Download bereits vor Bezahlung einer Bestellung an"
#~ msgid "Attendee names"
#~ msgstr "Teilnehmer*innennamen"
#~ msgstr "Teilnehmername"
#~ msgid "Enable output"
#~ msgstr "Aktivieren"
@@ -39783,7 +39783,7 @@ msgstr "Kosovo"
#~ "If checked, users can cancel orders by themselves as long as they are not "
#~ "yet paid."
#~ msgstr ""
#~ "Wenn diese Option aktiviert ist, können Teilnehmer*innen selbstständig "
#~ "Wenn diese Option aktiviert ist, können Teilnehmer selbstständig "
#~ "Bestellungen stornieren solange sie nicht bezahlt wurden."
#~ msgid "Sales overview"

View File

@@ -28,7 +28,7 @@ from decimal import Decimal
from django import forms
from django.db.models import F, Sum
from django.db.models.functions import Coalesce
from django.utils.formats import date_format
from django.utils.formats import date_format, localize
from django.utils.html import escape
from django.utils.timezone import now
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
@@ -43,7 +43,7 @@ from pretix.base.exporter import BaseExporter
from pretix.base.models import (
GiftCardTransaction, OrderFee, OrderPayment, OrderRefund, Transaction,
)
from pretix.base.templatetags.money import money_filter, tax_rate_format
from pretix.base.templatetags.money import money_filter
from pretix.base.timeframes import (
DateFrameField,
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
@@ -382,7 +382,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
else "",
tstyle_right,
),
Paragraph(tax_rate_format(r["tax_rate"]) + " %", tstyle_right),
Paragraph(localize(r["tax_rate"].normalize()) + " %", tstyle_right),
Paragraph(str(r["sum_cont"]), tstyle_right),
Paragraph(
money_filter(r["sum_price"] - r["sum_tax"], currency), tstyle_right
@@ -408,7 +408,7 @@ class ReportExporter(ReportlabExportMixin, BaseExporter):
[
FontFallbackParagraph(_("Sum"), tstyle),
Paragraph("", tstyle_right),
Paragraph(tax_rate_format(tax_rate) + " %", tstyle_right),
Paragraph(localize(tax_rate.normalize()) + " %", tstyle_right),
Paragraph("", tstyle_right),
Paragraph(
money_filter(

View File

@@ -173,11 +173,11 @@
<small>{% trans "incl. taxes" %}</small>
{% endif %}
{% elif var.display_price.rate and var.display_price.gross and event.settings.display_net_prices %}
<small>{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
<small>{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}</small>
{% elif var.display_price.rate and var.display_price.gross %}
<small>{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
<small>{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}</small>
{% endif %}
@@ -313,11 +313,11 @@
<small>{% trans "incl. taxes" %}</small>
{% endif %}
{% elif item.display_price.rate and item.display_price.gross and event.settings.display_net_prices %}
<small>{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
<small>{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}</small>
{% elif item.display_price.rate and item.display_price.gross %}
<small>{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
<small>{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}</small>
{% endif %}

View File

@@ -357,7 +357,7 @@
{% if line.tax_rate and line.total %}
<br />
<small>
{% blocktrans trimmed with rate=line.tax_rate|tax_rate_format taxname=line.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=line.tax_rate|floatformat:-2 taxname=line.tax_rule.name|default:s_taxes %}
<strong>plus</strong> {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -367,7 +367,7 @@
{% if line.tax_rate and line.total %}
<br />
<small>
{% blocktrans trimmed with rate=line.tax_rate|tax_rate_format taxname=line.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=line.tax_rate|floatformat:-2 taxname=line.tax_rule.name|default:s_taxes %}
incl. {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -416,7 +416,7 @@
{% if fee.tax_rate %}
<br />
<small>
{% blocktrans trimmed with rate=fee.tax_rate|tax_rate_format taxname=fee.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=fee.tax_rate|floatformat:-2 taxname=fee.tax_rule.name|default:s_taxes %}
<strong>plus</strong> {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>
@@ -426,7 +426,7 @@
{% if fee.tax_rate %}
<br />
<small>
{% blocktrans trimmed with rate=fee.tax_rate|tax_rate_format taxname=fee.tax_rule.name|default:s_taxes %}
{% blocktrans trimmed with rate=fee.tax_rate|floatformat:-2 taxname=fee.tax_rule.name|default:s_taxes %}
incl. {{ rate }}% {{ taxname }}
{% endblocktrans %}
</small>

View File

@@ -207,13 +207,13 @@
{% endif %}
{% elif var.display_price.rate and var.display_price.gross and event.settings.display_net_prices %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=var.display_price.gross|money:event.currency %}{{ value }} incl. taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
{% elif var.display_price.rate and var.display_price.gross %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=var.display_price.net|money:event.currency %}{{ value }} without taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
@@ -372,13 +372,13 @@
{% endif %}
{% elif item.display_price.rate and item.display_price.gross and event.settings.display_net_prices %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=item.display_price.gross|money:event.currency %}{{ value }} incl. taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
{% elif item.display_price.rate and item.display_price.gross %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=item.display_price.net|money:event.currency %}{{ value }} without taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}
</small>

View File

@@ -201,13 +201,13 @@
{% endif %}
{% elif var.display_price.rate and var.display_price.gross and event.settings.display_net_prices %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=var.display_price.gross|money:event.currency %}{{ value }} incl. taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
{% elif var.display_price.rate and var.display_price.gross %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=var.display_price.net|money:event.currency %}{{ value }} without taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=var.display_price.rate|tax_rate_format name=var.display_price.name %}
{% blocktrans trimmed with rate=var.display_price.rate|floatformat:-2 name=var.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
@@ -356,13 +356,13 @@
{% endif %}
{% elif item.display_price.rate and item.display_price.gross and event.settings.display_net_prices %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=item.display_price.gross|money:event.currency %}{{ value }} incl. taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
<strong>plus</strong> {{ rate }}% {{ name }}
{% endblocktrans %}
</small>
{% elif item.display_price.rate and item.display_price.gross %}
<small data-toggle="tooltip" title="{% blocktrans trimmed with value=item.display_price.net|money:event.currency %}{{ value }} without taxes{% endblocktrans %}" data-placement="bottom">
{% blocktrans trimmed with rate=item.display_price.rate|tax_rate_format name=item.display_price.name %}
{% blocktrans trimmed with rate=item.display_price.rate|floatformat:-2 name=item.display_price.name %}
incl. {{ rate }}% {{ name }}
{% endblocktrans %}
</small>

View File

@@ -265,7 +265,7 @@ EMAIL_USE_TLS = config.getboolean('mail', 'tls', fallback=False)
EMAIL_USE_SSL = config.getboolean('mail', 'ssl', fallback=False)
EMAIL_SUBJECT_PREFIX = '[pretix] '
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CUSTOM_SMTP_BACKEND = 'pretixbase.email.CheckPrivateNetworkSmtpBackend'
EMAIL_CUSTOM_SMTP_BACKEND = 'pretix.base.email.CheckPrivateNetworkSmtpBackend'
EMAIL_TIMEOUT = 60
ADMINS = [('Admin', n) for n in config.get('mail', 'admins', fallback='').split(",") if n]

View File

@@ -1,4 +1,5 @@
'use strict';
{
const globals = this;

View File

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

View File

@@ -189,8 +189,8 @@ class WidgetCartTest(CartTestMixin, TestCase):
"current_unavailability_reason": None,
"order_min": None,
"max_price": None,
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19", "includes_mixed_tax_rate": False},
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00", "includes_mixed_tax_rate": False},
"picture": None,
"picture_fullsize": None,
"has_variations": 0,
@@ -226,9 +226,9 @@ class WidgetCartTest(CartTestMixin, TestCase):
"id": self.shirt_red.pk,
'original_price': None,
"price": {"gross": "14.00", "net": "11.76", "tax": "2.24", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "14.00", "net": "11.76", "tax": "2.24", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"description": None,
"avail": [100, None],
"order_max": 2,
@@ -239,9 +239,9 @@ class WidgetCartTest(CartTestMixin, TestCase):
"id": self.shirt_blue.pk,
'original_price': None,
"price": {"gross": "12.00", "net": "10.08", "tax": "1.92", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "12.00", "net": "10.08", "tax": "1.92", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"description": None,
"avail": [100, None],
"order_max": 2,
@@ -278,9 +278,9 @@ class WidgetCartTest(CartTestMixin, TestCase):
"current_unavailability_reason": None,
"order_min": None,
"max_price": None,
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19",
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00",
"includes_mixed_tax_rate": False},
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19",
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00",
"includes_mixed_tax_rate": False},
"picture": None,
"picture_fullsize": None,
@@ -343,9 +343,9 @@ class WidgetCartTest(CartTestMixin, TestCase):
"id": self.shirt_red.pk,
'original_price': None,
"price": {"gross": "14.00", "net": "11.76", "tax": "2.24", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "14.00", "net": "11.76", "tax": "2.24", "name": "",
"rate": "19", "includes_mixed_tax_rate": False},
"rate": "19.00", "includes_mixed_tax_rate": False},
"description": None,
"avail": [100, None],
"order_max": 2,
@@ -395,8 +395,8 @@ class WidgetCartTest(CartTestMixin, TestCase):
"current_unavailability_reason": None,
"order_min": None,
"max_price": None,
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19", "includes_mixed_tax_rate": False},
"price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00", "includes_mixed_tax_rate": False},
"suggested_price": {"gross": "23.00", "net": "19.33", "tax": "3.67", "name": "", "rate": "19.00", "includes_mixed_tax_rate": False},
"picture": None,
"picture_fullsize": None,
"has_variations": 0,
@@ -481,7 +481,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
'gross': '14.00',
'net': '11.76',
'tax': '2.24',
'rate': '19',
'rate': '19.00',
'name': '',
'includes_mixed_tax_rate': False
},
@@ -489,7 +489,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
'gross': '14.00',
'net': '11.76',
'tax': '2.24',
'rate': '19',
'rate': '19.00',
'name': '',
'includes_mixed_tax_rate': False
},
@@ -601,7 +601,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
"net": "19.52",
"tax": "3.48",
"name": "MIXED!",
"rate": "19",
"rate": "19.00",
"includes_mixed_tax_rate": True
}