diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py
index 6e9ef623ce..45394ad7f5 100644
--- a/src/pretix/plugins/sendmail/views.py
+++ b/src/pretix/plugins/sendmail/views.py
@@ -64,6 +64,10 @@ class SenderView(EventPermissionRequiredMixin, FormView):
kwargs['initial']['subevents_from'] = dateutil.parser.parse(logentry.parsed_data['subevents_from'])
if logentry.parsed_data.get('subevents_to'):
kwargs['initial']['subevents_to'] = dateutil.parser.parse(logentry.parsed_data['subevents_to'])
+ if logentry.parsed_data.get('created_from'):
+ kwargs['initial']['created_from'] = dateutil.parser.parse(logentry.parsed_data['created_from'])
+ if logentry.parsed_data.get('created_to'):
+ kwargs['initial']['created_to'] = dateutil.parser.parse(logentry.parsed_data['created_to'])
if logentry.parsed_data.get('subevent'):
try:
kwargs['initial']['subevent'] = self.request.event.subevents.get(
@@ -117,6 +121,10 @@ class SenderView(EventPermissionRequiredMixin, FormView):
opq = opq.filter(subevent__date_from__gte=form.cleaned_data.get('subevents_from'))
if form.cleaned_data.get('subevents_to'):
opq = opq.filter(subevent__date_from__lt=form.cleaned_data.get('subevents_to'))
+ if form.cleaned_data.get('created_from'):
+ opq = opq.filter(order__datetime__gte=form.cleaned_data.get('created_from'))
+ if form.cleaned_data.get('created_to'):
+ opq = opq.filter(order__datetime__lt=form.cleaned_data.get('created_to'))
orders = orders.annotate(match_pos=Exists(opq)).filter(match_pos=True).distinct()
diff --git a/src/pretix/presale/forms/renderers.py b/src/pretix/presale/forms/renderers.py
index bd3a1e1af8..f0ff35e75f 100644
--- a/src/pretix/presale/forms/renderers.py
+++ b/src/pretix/presale/forms/renderers.py
@@ -1,5 +1,44 @@
from bootstrap3.renderers import FieldRenderer
+from bootstrap3.text import text_value
from bootstrap3.utils import add_css_class
+from django.forms import CheckboxInput
+from django.forms.utils import flatatt
+from django.utils.html import escape, format_html, strip_tags
+from django.utils.safestring import mark_safe
+from django.utils.translation import pgettext
+
+
+def render_label(content, label_for=None, label_class=None, label_title='', optional=False):
+ """
+ Render a label with content
+ """
+ attrs = {}
+ if label_for:
+ attrs['for'] = label_for
+ if label_class:
+ attrs['class'] = label_class
+ if label_title:
+ attrs['title'] = label_title
+
+ if text_value(content) == ' ':
+ # Empty label, e.g. checkbox
+ attrs.setdefault('class', '')
+ attrs['class'] += ' label-empty'
+ # usually checkboxes have overall empty labels and special labels per checkbox
+ # => remove for-attribute as well as "required"-text appended to label
+ del(attrs['for'])
+ opt = ""
+ else:
+ opt = mark_safe('
{}'.format(pgettext('form', 'required'))) if not optional else ''
+
+ builder = '<{tag}{attrs}>{content}{opt}{tag}>'
+ return format_html(
+ builder,
+ tag='label',
+ attrs=mark_safe(flatatt(attrs)) if attrs else '',
+ opt=opt,
+ content=text_value(content),
+ )
class CheckoutFieldRenderer(FieldRenderer):
@@ -24,3 +63,28 @@ class CheckoutFieldRenderer(FieldRenderer):
self.get_size_class(prefix='form-group')
)
return form_group_class
+
+ def add_label(self, html):
+ label = self.get_label()
+
+ if hasattr(self.field.field, '_required'):
+ # e.g. payment settings forms where a field is only required if the payment provider is active
+ required = self.field.field._required
+ else:
+ required = self.field.field.required
+
+ html = render_label(
+ label,
+ label_for=self.field.id_for_label,
+ label_class=self.get_label_class(),
+ optional=not required and not isinstance(self.widget, CheckboxInput)
+ ) + html
+ return html
+
+ def put_inside_label(self, html):
+ content = "{field} {label}".format(field=html, label=self.label)
+ return render_label(
+ content=mark_safe(content),
+ label_for=self.field.id_for_label,
+ label_title=escape(strip_tags(self.field_help)),
+ )
diff --git a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html
index f23f86744e..e88d0d6321 100644
--- a/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html
+++ b/src/pretix/presale/templates/pretixpresale/event/checkout_questions.html
@@ -4,7 +4,7 @@
{% load rich_text %}
{% block inner %}
{% trans "Before we continue, we need you to answer some questions." %}
-
+
{% blocktrans trimmed %}
You need to fill all fields that are marked with * to continue.
{% endblocktrans %}