From 215a28fac51c67de90337777183f5a6f0869ceb0 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 13 Dec 2017 17:48:07 +0100 Subject: [PATCH] Sendmail plugin: Allow to filter users by product --- src/pretix/plugins/sendmail/forms.py | 10 ++++++++-- .../templates/pretixplugins/sendmail/send_form.html | 1 + src/pretix/plugins/sendmail/views.py | 5 ++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/pretix/plugins/sendmail/forms.py b/src/pretix/plugins/sendmail/forms.py index 8cfa43a1b8..d2a8c30435 100644 --- a/src/pretix/plugins/sendmail/forms.py +++ b/src/pretix/plugins/sendmail/forms.py @@ -3,14 +3,19 @@ from django.utils.translation import pgettext_lazy, ugettext_lazy as _ from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput from pretix.base.forms import PlaceholderValidator -from pretix.base.models import Order -from pretix.base.models.event import SubEvent +from pretix.base.models import Item, Order, SubEvent class MailForm(forms.Form): sendto = forms.MultipleChoiceField() # overridden later subject = forms.CharField(label=_("Subject")) message = forms.CharField(label=_("Message")) + item = forms.ModelChoiceField( + Item.objects.none(), + label=_('Only send to people who bought'), + required=False, + empty_label=_('Any product') + ) subevent = forms.ModelChoiceField( SubEvent.objects.none(), label=_('Only send to customers of'), @@ -47,6 +52,7 @@ class MailForm(forms.Form): widget=forms.CheckboxSelectMultiple, choices=choices ) + self.fields['item'].queryset = event.items.all() if event.has_subevents: self.fields['subevent'].queryset = event.subevents.all() else: diff --git a/src/pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html b/src/pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html index 70baa68eec..fdfdf2c2e2 100644 --- a/src/pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html +++ b/src/pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html @@ -11,6 +11,7 @@ {% if form.subevent %} {% bootstrap_field form.subevent layout='horizontal' %} {% endif %} + {% bootstrap_field form.item layout='horizontal' %} {% bootstrap_field form.subject layout='horizontal' %} {% bootstrap_field form.message layout='horizontal' %} {% if request.method == "POST" %} diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index ea42617c6d..dcfbbe9371 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -65,8 +65,11 @@ class SenderView(EventPermissionRequiredMixin, FormView): if 'overdue' in form.cleaned_data['sendto']: statusq |= Q(status=Order.STATUS_PENDING, expires__lt=now()) orders = qs.filter(statusq) + if form.cleaned_data.get('item'): + orders = orders.filter(positions__item=form.cleaned_data.get('item')) if form.cleaned_data.get('subevent'): - orders = orders.filter(positions__subevent__in=(form.cleaned_data.get('subevent'),)).distinct() + orders = orders.filter(positions__subevent__in=(form.cleaned_data.get('subevent'),)) + orders = orders.distinct() tz = pytz.timezone(self.request.event.settings.timezone)