diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 55035a8903..f51efd3176 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -1130,7 +1130,7 @@ class TaxRuleLineForm(forms.Form): TaxRuleLineFormSet = formset_factory( TaxRuleLineForm, - can_order=False, can_delete=True, extra=0 + can_order=True, can_delete=True, extra=0 ) diff --git a/src/pretix/control/templates/pretixcontrol/event/tax_edit.html b/src/pretix/control/templates/pretixcontrol/event/tax_edit.html index 852ae17e1f..98651dc67e 100644 --- a/src/pretix/control/templates/pretixcontrol/event/tax_edit.html +++ b/src/pretix/control/templates/pretixcontrol/event/tax_edit.html @@ -50,66 +50,78 @@ {% trans "All of these rules will only apply if an invoice address is set." %} -
+
{{ formset.management_form }} {% bootstrap_formset_errors formset %} -
- {% for form in formset %} - {% bootstrap_form_errors form %} -
-
- {{ form.id }} - {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} -
-
- {% bootstrap_field form.country layout='inline' form_group_class="" %} -
-
- {% bootstrap_field form.address_type layout='inline' form_group_class="" %} -
-
- {% bootstrap_field form.action layout='inline' form_group_class="" %} -
-
- {% bootstrap_field form.rate layout='inline' form_group_class="" %} -
-
- -
-
- {% endfor %} -
-

- -

+
+ {% for form in formset %} + {% bootstrap_form_errors form %} +
+
+ {{ form.id }} + {% bootstrap_field form.DELETE form_group_class="" layout="inline" %} + {% bootstrap_field form.ORDER form_group_class="" layout="inline" %} +
+
+ {% bootstrap_field form.country layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.address_type layout='inline' form_group_class="" %} +
+
+ {% bootstrap_field form.action layout='inline' form_group_class="" %} +
+
+ + + +
+
+ {% bootstrap_field form.rate layout='inline' form_group_class="" %} +
+
+ {% endfor %} +
+
+
+ +
+
diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 7a1ded8f55..fa87e3c7e4 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -1104,7 +1104,7 @@ class TaxCreate(EventSettingsViewMixin, EventPermissionRequiredMixin, CreateView def form_valid(self, form): form.instance.event = self.request.event form.instance.custom_rules = json.dumps([ - f.cleaned_data for f in self.formset if f not in self.formset.deleted_forms + f.cleaned_data for f in self.formset.ordered_forms if f not in self.formset.deleted_forms ], cls=DjangoJSONEncoder) messages.success(self.request, _('The new tax rule has been created.')) ret = super().form_valid(form) @@ -1155,7 +1155,7 @@ class TaxUpdate(EventSettingsViewMixin, EventPermissionRequiredMixin, UpdateView def form_valid(self, form): messages.success(self.request, _('Your changes have been saved.')) form.instance.custom_rules = json.dumps([ - f.cleaned_data for f in self.formset if f not in self.formset.deleted_forms + f.cleaned_data for f in self.formset.ordered_forms if f not in self.formset.deleted_forms ], cls=DjangoJSONEncoder) if form.has_changed(): self.object.log_action( diff --git a/src/pretix/static/pretixcontrol/scss/_forms.scss b/src/pretix/static/pretixcontrol/scss/_forms.scss index 5f2d71537c..c5bc0a628f 100644 --- a/src/pretix/static/pretixcontrol/scss/_forms.scss +++ b/src/pretix/static/pretixcontrol/scss/_forms.scss @@ -569,3 +569,21 @@ table td > .checkbox input[type="checkbox"] { border-left: 4px solid $brand-success; } } + +.tax-rules-formset { + margin-left: -15px; + margin-right: -15px; +} +.tax-rule-line { + padding-bottom: 5px; + padding-top: 5px; + border-bottom: 1px solid $input-border; + margin: 0; + & > div { + padding-top: 5px; + padding-bottom: 5px; + } +} +.tax-rule-lines .tax-rule-line { + border-bottom: 1px solid $input-border; +}