mirror of
https://github.com/pretix/pretix.git
synced 2026-05-11 16:13:59 +00:00
Persist rounding mode with order
This commit is contained in:
@@ -73,4 +73,9 @@ class Migration(migrations.Migration):
|
|||||||
decimal_places=2, default=Decimal("0.00"), max_digits=13
|
decimal_places=2, default=Decimal("0.00"), max_digits=13
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="order",
|
||||||
|
name="tax_rounding_mode",
|
||||||
|
field=models.CharField(default="line", max_length=100),
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ from pretix.base.email import get_email_context
|
|||||||
from pretix.base.i18n import language
|
from pretix.base.i18n import language
|
||||||
from pretix.base.models import Customer, User
|
from pretix.base.models import Customer, User
|
||||||
from pretix.base.reldate import RelativeDateWrapper
|
from pretix.base.reldate import RelativeDateWrapper
|
||||||
from pretix.base.settings import PERSON_NAME_SCHEMES
|
from pretix.base.settings import PERSON_NAME_SCHEMES, ROUNDING_MODES
|
||||||
from pretix.base.signals import allow_ticket_download, order_gracefully_delete
|
from pretix.base.signals import allow_ticket_download, order_gracefully_delete
|
||||||
from pretix.base.timemachine import time_machine_now
|
from pretix.base.timemachine import time_machine_now
|
||||||
|
|
||||||
@@ -324,6 +324,11 @@ class Order(LockModel, LoggedModel):
|
|||||||
# Invoice needs to be re-issued when the order is paid again
|
# Invoice needs to be re-issued when the order is paid again
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
|
tax_rounding_mode = models.CharField(
|
||||||
|
max_length=100,
|
||||||
|
choices=ROUNDING_MODES,
|
||||||
|
default="line",
|
||||||
|
)
|
||||||
|
|
||||||
objects = ScopedManager(OrderQuerySet.as_manager().__class__, organizer='event__organizer')
|
objects = ScopedManager(OrderQuerySet.as_manager().__class__, organizer='event__organizer')
|
||||||
|
|
||||||
|
|||||||
@@ -1039,6 +1039,7 @@ def _create_order(event: Event, *, email: str, positions: List[CartPosition], no
|
|||||||
sales_channel=sales_channel,
|
sales_channel=sales_channel,
|
||||||
customer=customer,
|
customer=customer,
|
||||||
valid_if_pending=valid_if_pending,
|
valid_if_pending=valid_if_pending,
|
||||||
|
tax_rounding_mode=event.settings.tax_rounding,
|
||||||
)
|
)
|
||||||
if customer:
|
if customer:
|
||||||
order.email_known_to_work = customer.is_verified
|
order.email_known_to_work = customer.is_verified
|
||||||
@@ -2751,8 +2752,7 @@ class OrderChangeManager:
|
|||||||
if fee_changed:
|
if fee_changed:
|
||||||
fees = list(self.order.fees.all())
|
fees = list(self.order.fees.all())
|
||||||
|
|
||||||
print("round", positions, fees)
|
changed = apply_rounding(self.order.tax_rounding_mode, self.order.event.currency, [*positions, *fees])
|
||||||
changed = apply_rounding(self.order.event.settings.tax_rounding, self.order.event.currency, [*positions, *fees])
|
|
||||||
for l in changed:
|
for l in changed:
|
||||||
if isinstance(l, OrderPosition):
|
if isinstance(l, OrderPosition):
|
||||||
l.save(update_fields=[
|
l.save(update_fields=[
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ from pretix.control.forms import (
|
|||||||
from pretix.helpers.countries import CachedCountries
|
from pretix.helpers.countries import CachedCountries
|
||||||
|
|
||||||
|
|
||||||
|
ROUNDING_MODES = (
|
||||||
|
('line', _('Rounding every line individually')),
|
||||||
|
('sum_by_net', _('Rounding by order total, keeping net prices stable')),
|
||||||
|
('sum_by_gross', _('Rounding by order total, keeping gross prices stable')),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def country_choice_kwargs():
|
def country_choice_kwargs():
|
||||||
allcountries = list(CachedCountries())
|
allcountries = list(CachedCountries())
|
||||||
allcountries.insert(0, ('', _('Select country')))
|
allcountries.insert(0, ('', _('Select country')))
|
||||||
@@ -473,18 +480,10 @@ DEFAULTS = {
|
|||||||
'form_kwargs': dict(
|
'form_kwargs': dict(
|
||||||
label=_("Rounding of taxes"),
|
label=_("Rounding of taxes"),
|
||||||
widget=forms.RadioSelect,
|
widget=forms.RadioSelect,
|
||||||
choices=(
|
choices=ROUNDING_MODES,
|
||||||
('line', _('Rounding every line individually')),
|
|
||||||
('sum_by_net', _('Rounding by order total, keeping net prices stable')),
|
|
||||||
('sum_by_gross', _('Rounding by order total, keeping gross prices stable')),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
'serializer_kwargs': dict(
|
'serializer_kwargs': dict(
|
||||||
choices=(
|
choices=ROUNDING_MODES,
|
||||||
('line', _('Rounding every line individually')),
|
|
||||||
('sum_by_net', _('Rounding by order total, keeping net prices stable')),
|
|
||||||
('sum_by_gross', _('Rounding by order total, keeping gross prices stable')),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
'invoice_address_asked': {
|
'invoice_address_asked': {
|
||||||
|
|||||||
@@ -643,7 +643,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if django_settings.DEBUG %}
|
{% if django_settings.DEBUG %}
|
||||||
<br/>
|
<br/>
|
||||||
<small>
|
<small class="admin-only">
|
||||||
price = {{ line.price|floatformat:2 }}<br>
|
price = {{ line.price|floatformat:2 }}<br>
|
||||||
rounding_correction = {{ line.price_includes_rounding_correction|floatformat:2 }}<br>
|
rounding_correction = {{ line.price_includes_rounding_correction|floatformat:2 }}<br>
|
||||||
tax_value = {{ line.tax_value|floatformat:2 }}<br>
|
tax_value = {{ line.tax_value|floatformat:2 }}<br>
|
||||||
@@ -693,7 +693,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% if django_settings.DEBUG %}
|
{% if django_settings.DEBUG %}
|
||||||
<br/>
|
<br/>
|
||||||
<small>
|
<small class="admin-only">
|
||||||
price = {{ fee.value|floatformat:2 }}<br>
|
price = {{ fee.value|floatformat:2 }}<br>
|
||||||
rounding_correction = {{ fee.value_includes_rounding_correction|floatformat:2 }}<br>
|
rounding_correction = {{ fee.value_includes_rounding_correction|floatformat:2 }}<br>
|
||||||
tax_value = {{ fee.tax_value|floatformat:2 }}<br>
|
tax_value = {{ fee.tax_value|floatformat:2 }}<br>
|
||||||
@@ -729,6 +729,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 col-xs-6 col-md-offset-5 price">
|
<div class="col-md-3 col-xs-6 col-md-offset-5 price">
|
||||||
<strong>{{ items.total|money:event.currency }}</strong>
|
<strong>{{ items.total|money:event.currency }}</strong>
|
||||||
|
<br/>
|
||||||
|
<small class="admin-only">
|
||||||
|
tax_rounding_mode = {{ order.tax_rounding_mode }}
|
||||||
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user