diff --git a/src/pretix/base/migrations/0011_auto_20160311_2052.py b/src/pretix/base/migrations/0011_auto_20160311_2052.py new file mode 100644 index 0000000000..56ac633eb2 --- /dev/null +++ b/src/pretix/base/migrations/0011_auto_20160311_2052.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-03-11 20:52 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0010_orderposition_secret'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='payment_fee_tax_rate', + field=models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Payment method fee tax rate'), + preserve_default=False, + ), + migrations.AddField( + model_name='order', + name='payment_fee_tax_value', + field=models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='Payment method fee tax'), + ), + ] diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 35ab765986..9147a734b1 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -123,6 +123,14 @@ class Order(LoggedModel): decimal_places=2, max_digits=10, default=0, verbose_name=_("Payment method fee") ) + payment_fee_tax_rate = models.DecimalField( + decimal_places=2, max_digits=10, + verbose_name=_("Payment method fee tax rate") + ) + payment_fee_tax_value = models.DecimalField( + decimal_places=2, max_digits=10, + default=0, verbose_name=_("Payment method fee tax") + ) payment_info = models.TextField( verbose_name=_("Payment information"), null=True, blank=True @@ -157,8 +165,18 @@ class Order(LoggedModel): self.assign_code() if not self.datetime: self.datetime = now() + if self.payment_fee_tax_rate is None: + self._calculate_tax() super().save(*args, **kwargs) + def _calculate_tax(self): + self.payment_fee_tax_rate = self.event.settings.get('tax_rate_default') + if self.payment_fee_tax_rate: + self.payment_fee_tax_value = round_decimal( + self.payment_fee * (1 - 100 / (100 + self.payment_fee_tax_rate))) + else: + self.payment_fee_tax_value = Decimal('0.00') + def assign_code(self): charset = list('ABCDEFGHKLMNPQRSTUVWXYZ23456789') while True: diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index a998701fa6..ac7819d452 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -57,6 +57,10 @@ DEFAULTS = { 'default': 'True', 'type': bool }, + 'tax_rate_default': { + 'default': '0.00', + 'type': decimal.Decimal + }, 'show_items_outside_presale_period': { 'default': 'True', 'type': bool diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 1d4da9ff48..e6df5a8292 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -108,6 +108,11 @@ class EventSettingsForm(SettingsForm): "answers to questions."), required=False ) + tax_rate_default = forms.DecimalField( + label=_('Tax rate for payment fees'), + help_text=_("The tax rate that applies for additional fees you configured for single payment methods " + "(in percent)."), + ) timezone = forms.ChoiceField( choices=((a, a) for a in common_timezones), label=_("Default timezone"), diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index d0b112a6df..a9ae5e785c 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -36,14 +36,18 @@ {% bootstrap_field sform.last_order_modification_date layout="horizontal" %}
+