New data model for default tax rule and new options for cancellation fees (#4962)

* New data model for default tax rule

* Remove misleading empty label when field is not optional

* Allow to split cancellation fee

* Fix API and tests

* Update migration

* Update src/tests/api/test_taxrules.py

Co-authored-by: luelista <weller@rami.io>

* Update src/tests/api/test_taxrules.py

Co-authored-by: luelista <weller@rami.io>

* Review note

* Update src/pretix/base/models/tax.py

Co-authored-by: luelista <weller@rami.io>

* Flip API behaviour for default

* Fix failing tests

* Fix failing test

* Split migration

---------

Co-authored-by: luelista <weller@rami.io>
This commit is contained in:
Raphael Michel
2025-06-30 16:47:09 +02:00
committed by GitHub
parent 090358833d
commit 14ed6982a5
34 changed files with 615 additions and 104 deletions

View File

@@ -66,7 +66,7 @@ from pretix.api.serializers.fields import (
)
from pretix.api.serializers.i18n import I18nURLField
from pretix.base.forms import I18nMarkdownTextarea, I18nURLFormField
from pretix.base.models.tax import VAT_ID_COUNTRIES, TaxRule
from pretix.base.models.tax import VAT_ID_COUNTRIES
from pretix.base.reldate import (
RelativeDateField, RelativeDateTimeField, RelativeDateWrapper,
SerializerRelativeDateField, SerializerRelativeDateTimeField,
@@ -1027,9 +1027,47 @@ DEFAULTS = {
widget=forms.CheckboxInput,
)
},
'tax_rate_default': {
'default': None,
'type': TaxRule
'tax_rule_payment': {
'default': 'default',
'type': str,
'form_class': forms.ChoiceField,
'serializer_class': serializers.ChoiceField,
'serializer_kwargs': dict(
choices=(
('default', _('Use default tax rate')),
('none', _('Charge no taxes')),
),
),
'form_kwargs': dict(
label=_("Tax handling on payment fees"),
widget=forms.RadioSelect,
choices=(
('default', _('Use default tax rate')),
('none', _('Charge no taxes')),
),
)
},
'tax_rule_cancellation': {
'default': 'none',
'type': str,
'form_class': forms.ChoiceField,
'serializer_class': serializers.ChoiceField,
'serializer_kwargs': dict(
choices=(
('none', _('Charge no taxes')),
('split', _('Use same taxes as order positions (split according to net prices)')),
('default', _('Use default tax rate')),
),
),
'form_kwargs': dict(
label=_("Tax handling on cancellation fees"),
widget=forms.RadioSelect,
choices=(
('none', _('Charge no taxes')),
('split', _('Use same taxes as order positions (split according to net prices)')),
('default', _('Use default tax rate')),
),
)
},
'invoice_generate': {
'default': 'False',