Sendmail plugin: Allow to filter users by product

This commit is contained in:
Raphael Michel
2017-12-13 17:48:07 +01:00
parent e9e155201f
commit 215a28fac5
3 changed files with 13 additions and 3 deletions

View File

@@ -3,14 +3,19 @@ from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput from i18nfield.forms import I18nFormField, I18nTextarea, I18nTextInput
from pretix.base.forms import PlaceholderValidator from pretix.base.forms import PlaceholderValidator
from pretix.base.models import Order from pretix.base.models import Item, Order, SubEvent
from pretix.base.models.event import SubEvent
class MailForm(forms.Form): class MailForm(forms.Form):
sendto = forms.MultipleChoiceField() # overridden later sendto = forms.MultipleChoiceField() # overridden later
subject = forms.CharField(label=_("Subject")) subject = forms.CharField(label=_("Subject"))
message = forms.CharField(label=_("Message")) 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 = forms.ModelChoiceField(
SubEvent.objects.none(), SubEvent.objects.none(),
label=_('Only send to customers of'), label=_('Only send to customers of'),
@@ -47,6 +52,7 @@ class MailForm(forms.Form):
widget=forms.CheckboxSelectMultiple, widget=forms.CheckboxSelectMultiple,
choices=choices choices=choices
) )
self.fields['item'].queryset = event.items.all()
if event.has_subevents: if event.has_subevents:
self.fields['subevent'].queryset = event.subevents.all() self.fields['subevent'].queryset = event.subevents.all()
else: else:

View File

@@ -11,6 +11,7 @@
{% if form.subevent %} {% if form.subevent %}
{% bootstrap_field form.subevent layout='horizontal' %} {% bootstrap_field form.subevent layout='horizontal' %}
{% endif %} {% endif %}
{% bootstrap_field form.item layout='horizontal' %}
{% bootstrap_field form.subject layout='horizontal' %} {% bootstrap_field form.subject layout='horizontal' %}
{% bootstrap_field form.message layout='horizontal' %} {% bootstrap_field form.message layout='horizontal' %}
{% if request.method == "POST" %} {% if request.method == "POST" %}

View File

@@ -65,8 +65,11 @@ class SenderView(EventPermissionRequiredMixin, FormView):
if 'overdue' in form.cleaned_data['sendto']: if 'overdue' in form.cleaned_data['sendto']:
statusq |= Q(status=Order.STATUS_PENDING, expires__lt=now()) statusq |= Q(status=Order.STATUS_PENDING, expires__lt=now())
orders = qs.filter(statusq) 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'): 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) tz = pytz.timezone(self.request.event.settings.timezone)