From 9b573b99e44e60924a6e29f4e8a85b3f41549b5b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 29 Jul 2016 16:46:10 +0200 Subject: [PATCH] Re-organized some of the settings pages --- src/pretix/control/forms/event.py | 178 +++++++++--------- .../pretixcontrol/event/invoicing.html | 24 +++ .../pretixcontrol/event/payment.html | 8 + .../pretixcontrol/event/settings.html | 15 -- .../pretixcontrol/event/settings_base.html | 5 + src/pretix/control/urls.py | 1 + src/pretix/control/views/event.py | 75 ++++++-- 7 files changed, 192 insertions(+), 114 deletions(-) create mode 100644 src/pretix/control/templates/pretixcontrol/event/invoicing.html diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 1597b1794..2f9edd2fa 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -97,10 +97,6 @@ class EventSettingsForm(SettingsForm): help_text=_("If disabled, the event's start and end date will be displayed without the time of day."), required=False ) - payment_term_days = forms.IntegerField( - label=_('Payment term in days'), - help_text=_("The number of days after placing an order the user has to pay to preserve his reservation."), - ) show_items_outside_presale_period = forms.BooleanField( label=_("Show items outside presale period"), help_text=_("Show item details before presale has started and after presale has ended"), @@ -111,37 +107,12 @@ class EventSettingsForm(SettingsForm): help_text=_("Show the presale start date before presale has started"), required=False ) - payment_term_last = forms.DateTimeField( - label=_('Last date of payments'), - help_text=_("The last date any payments are accepted. This has precedence over the number of " - "days configured above."), - required=False - ) - payment_term_expire_automatically = forms.BooleanField( - label=_('Automatically expire unpaid orders'), - help_text=_("If checked, all unpaid orders will automatically go from 'pending' to 'expired' " - "after the end of their payment deadline. This means that those tickets go back to " - "the pool and can be ordered by other people."), - required=False - ) - payment_term_accept_late = forms.BooleanField( - label=_('Accept late payments'), - help_text=_("Accept payments for orders even when they are in 'expired' state as long as enough " - "capacity is available. No payments will ever be accepted after the 'Last date of payments' " - "configured above."), - required=False - ) last_order_modification_date = forms.DateTimeField( label=_('Last date of modifications'), help_text=_("The last date users can modify details of their orders, such as attendee names or " "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"), @@ -169,6 +140,98 @@ class EventSettingsForm(SettingsForm): help_text=_("Require customers to fill in the names of all attendees."), required=False ) + max_items_per_order = forms.IntegerField( + min_value=1, + label=_("Maximum number of items per order") + ) + reservation_time = forms.IntegerField( + min_value=0, + label=_("Reservation period"), + help_text=_("The number of minutes the items in a user's card are reserved for this user."), + ) + imprint_url = forms.URLField( + label=_("Imprint URL"), + required=False, + ) + contact_mail = forms.EmailField( + label=_("Contact address"), + required=False, + help_text=_("Public email address for contacting the organizer") + ) + + def clean(self): + data = super().clean() + if data['locale'] not in data['locales']: + raise ValidationError({ + 'locale': _('Your default locale must also be enebled for your event (see box above).') + }) + if data['attendee_names_required'] and not data['attendee_names_asked']: + raise ValidationError({ + 'attendee_names_required': _('You cannot require specifying attendee names if you do not ask for them.') + }) + return data + + +class PaymentSettingsForm(SettingsForm): + payment_term_days = forms.IntegerField( + label=_('Payment term in days'), + help_text=_("The number of days after placing an order the user has to pay to preserve his reservation."), + ) + payment_term_last = forms.DateTimeField( + label=_('Last date of payments'), + help_text=_("The last date any payments are accepted. This has precedence over the number of " + "days configured above."), + required=False + ) + payment_term_expire_automatically = forms.BooleanField( + label=_('Automatically expire unpaid orders'), + help_text=_("If checked, all unpaid orders will automatically go from 'pending' to 'expired' " + "after the end of their payment deadline. This means that those tickets go back to " + "the pool and can be ordered by other people."), + required=False + ) + payment_term_accept_late = forms.BooleanField( + label=_('Accept late payments'), + help_text=_("Accept payments for orders even when they are in 'expired' state as long as enough " + "capacity is available. No payments will ever be accepted after the 'Last date of payments' " + "configured above."), + 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)."), + ) + + +class ProviderForm(SettingsForm): + """ + This is a SettingsForm, but if fields are set to required=True, validation + errors are only raised if the payment method is enabled. + """ + + def __init__(self, *args, **kwargs): + self.settingspref = kwargs.pop('settingspref') + super().__init__(*args, **kwargs) + + def prepare_fields(self): + for k, v in self.fields.items(): + v._required = v.required + v.required = False + v.widget.is_required = False + + def clean(self): + cleaned_data = super().clean() + enabled = cleaned_data.get(self.settingspref + '_enabled') == 'True' + if not enabled: + return + for k, v in self.fields.items(): + val = cleaned_data.get(k) + if v._required and (val is None or val == ""): + self.add_error(k, _('This field is required.')) + + +class InvoiceSettingsForm(SettingsForm): invoice_address_asked = forms.BooleanField( label=_("Ask for invoice address"), required=False @@ -208,63 +271,6 @@ class EventSettingsForm(SettingsForm): label=_("Invoice language"), choices=[('__user__', _('The user\'s language'))] + settings.LANGUAGES, ) - max_items_per_order = forms.IntegerField( - min_value=1, - label=_("Maximum number of items per order") - ) - reservation_time = forms.IntegerField( - min_value=0, - label=_("Reservation period"), - help_text=_("The number of minutes the items in a user's card are reserved for this user."), - ) - imprint_url = forms.URLField( - label=_("Imprint URL"), - required=False, - ) - contact_mail = forms.EmailField( - label=_("Contact address"), - required=False, - help_text=_("Public email address for contacting the organizer") - ) - - def clean(self): - data = super().clean() - if data['locale'] not in data['locales']: - raise ValidationError({ - 'locale': _('Your default locale must also be enebled for your event (see box above).') - }) - if data['attendee_names_required'] and not data['attendee_names_asked']: - raise ValidationError({ - 'attendee_names_required': _('You cannot require specifying attendee names if you do not ask for them.') - }) - return data - - -class ProviderForm(SettingsForm): - """ - This is a SettingsForm, but if fields are set to required=True, validation - errors are only raised if the payment method is enabled. - """ - - def __init__(self, *args, **kwargs): - self.settingspref = kwargs.pop('settingspref') - super().__init__(*args, **kwargs) - - def prepare_fields(self): - for k, v in self.fields.items(): - v._required = v.required - v.required = False - v.widget.is_required = False - - def clean(self): - cleaned_data = super().clean() - enabled = cleaned_data.get(self.settingspref + '_enabled') == 'True' - if not enabled: - return - for k, v in self.fields.items(): - val = cleaned_data.get(k) - if v._required and (val is None or val == ""): - self.add_error(k, _('This field is required.')) class MailSettingsForm(SettingsForm): diff --git a/src/pretix/control/templates/pretixcontrol/event/invoicing.html b/src/pretix/control/templates/pretixcontrol/event/invoicing.html new file mode 100644 index 000000000..745e2738b --- /dev/null +++ b/src/pretix/control/templates/pretixcontrol/event/invoicing.html @@ -0,0 +1,24 @@ +{% extends "pretixcontrol/event/settings_base.html" %} +{% load i18n %} +{% load bootstrap3 %} +{% block inside %} +
+ {% csrf_token %} + {% bootstrap_form_errors form %} +
+ {% trans "Invoicing" %} + {% bootstrap_field form.invoice_address_asked layout="horizontal" %} + {% bootstrap_field form.invoice_address_required layout="horizontal" %} + {% bootstrap_field form.invoice_address_vatid layout="horizontal" %} + {% bootstrap_field form.invoice_generate layout="horizontal" %} + {% bootstrap_field form.invoice_language layout="horizontal" %} + {% bootstrap_field form.invoice_address_from layout="horizontal" %} + {% bootstrap_field form.invoice_additional_text layout="horizontal" %} +
+
+ +
+
+{% endblock %} diff --git a/src/pretix/control/templates/pretixcontrol/event/payment.html b/src/pretix/control/templates/pretixcontrol/event/payment.html index c2a3a48c8..892ed9562 100644 --- a/src/pretix/control/templates/pretixcontrol/event/payment.html +++ b/src/pretix/control/templates/pretixcontrol/event/payment.html @@ -6,6 +6,14 @@ {% csrf_token %}
{% trans "Payment settings" %} + {% bootstrap_field sform.payment_term_days layout="horizontal" %} + {% bootstrap_field sform.payment_term_last layout="horizontal" %} + {% bootstrap_field sform.payment_term_expire_automatically layout="horizontal" %} + {% bootstrap_field sform.payment_term_accept_late layout="horizontal" %} + {% bootstrap_field sform.tax_rate_default layout="horizontal" %} +
+
+ {% trans "Payment providers" %} {% for provider in providers %}
diff --git a/src/pretix/control/templates/pretixcontrol/event/settings.html b/src/pretix/control/templates/pretixcontrol/event/settings.html index 517572773..da0e88334 100644 --- a/src/pretix/control/templates/pretixcontrol/event/settings.html +++ b/src/pretix/control/templates/pretixcontrol/event/settings.html @@ -31,10 +31,6 @@ {% bootstrap_field sform.presale_start_show_date layout="horizontal" %} {% bootstrap_field form.presale_end layout="horizontal" %} {% bootstrap_field sform.show_items_outside_presale_period layout="horizontal" %} - {% bootstrap_field sform.payment_term_days layout="horizontal" %} - {% bootstrap_field sform.payment_term_last layout="horizontal" %} - {% bootstrap_field sform.payment_term_expire_automatically layout="horizontal" %} - {% bootstrap_field sform.payment_term_accept_late layout="horizontal" %} {% bootstrap_field sform.last_order_modification_date layout="horizontal" %}
@@ -44,17 +40,6 @@ {% bootstrap_field sform.attendee_names_asked layout="horizontal" %} {% bootstrap_field sform.attendee_names_required layout="horizontal" %}
-
- {% trans "Invoicing" %} - {% bootstrap_field sform.invoice_address_asked layout="horizontal" %} - {% bootstrap_field sform.invoice_address_required layout="horizontal" %} - {% bootstrap_field sform.invoice_address_vatid layout="horizontal" %} - {% bootstrap_field sform.tax_rate_default layout="horizontal" %} - {% bootstrap_field sform.invoice_generate layout="horizontal" %} - {% bootstrap_field sform.invoice_language layout="horizontal" %} - {% bootstrap_field sform.invoice_address_from layout="horizontal" %} - {% bootstrap_field sform.invoice_additional_text layout="horizontal" %} -