pretix-servicefees/pretix_servicefees/views.py

84 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django import forms
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from pretix.base.forms import SettingsForm
from pretix.base.models import Event
from pretix.control.views.event import EventSettingsViewMixin, EventSettingsFormView
from pretix.helpers.money import change_decimal_field
class ServiceFeeSettingsForm(SettingsForm):
service_fee_abs = forms.DecimalField(
label=_('Fixed fee per order'),
required=False
)
service_fee_percent = forms.DecimalField(
label=_('Percentual fee per order'),
help_text=_('Percentage of the order total. Note that this percentage will currently only '
'be calculated on the summed price of sold tickets, not on other fees like e.'
'g. shipping fees, if there are any.'),
required=False
)
service_fee_per_ticket = forms.DecimalField(
label=_('Fixed fee per ticket'),
help_text=_('This fee will be added for each ticket sold, except for free items and addons.'),
required=False
)
service_fee_skip_if_gift_card = forms.BooleanField(
label=_('Do not charge service fee on tickets paid with gift cards'),
help_text=_('If a gift card is used for the payment, the percentual fees will be applied on the value of the '
'tickets minus the value of the gift cards. All fixed fees will be dropped if the tickets can '
'be paid with gift cards entirely. This only works if the gift card is redeemd when the order is '
'submitted, not if it\'s used to pay an unpaid order later.'),
required=False
)
service_fee_skip_addons = forms.BooleanField(
label=_('Do not charge per-ticket service fee on add-on products'),
required=False
)
service_fee_skip_non_admission = forms.BooleanField(
label=_('Do not charge per-ticket service fee on non-admission products'),
required=False
)
service_fee_skip_free = forms.BooleanField(
label=_('Do not charge per-ticket service fee on free products'),
help_text=_('Note that regardless of this setting, a per-ticket fee will not be charged if the entire order is free.'),
required=False
)
service_fee_split_taxes = forms.BooleanField(
label=_('Split taxes proportionate to the tax rates and net values of the ordered products.'),
help_text=_('If not split based on ordered products, the tax rate falls back to the events base tax rate or no tax, if none is given.'),
required=False
)
service_fee_abs_resellers = forms.DecimalField(
label=_('Fixed fee per order'),
required=False
)
service_fee_percent_resellers = forms.DecimalField(
label=_('Percentual fee per order'),
help_text=_('Percentage of the order total. Note that this percentage will currently only '
'be calculated on the summed price of sold tickets, not on other fees like e.'
'g. shipping fees, if there are any.'),
required=False
)
service_fee_per_ticket_resellers = forms.DecimalField(
label=_('Fixed fee per ticket'),
required=False,
help_text=_('This fee will be added for each ticket sold, except for free items and addons.')
)
class SettingsView(EventSettingsViewMixin, EventSettingsFormView):
model = Event
form_class = ServiceFeeSettingsForm
template_name = 'pretix_servicefees/settings.html'
permission = 'can_change_event_settings'
def get_success_url(self) -> str:
return reverse('plugins:pretix_servicefees:settings', kwargs={
'organizer': self.request.event.organizer.slug,
'event': self.request.event.slug
})