diff --git a/src/pretix/plugins/sendmail/forms.py b/src/pretix/plugins/sendmail/forms.py index 89e575344e..efe5e699e6 100644 --- a/src/pretix/plugins/sendmail/forms.py +++ b/src/pretix/plugins/sendmail/forms.py @@ -6,10 +6,7 @@ from pretix.base.models import Order class MailForm(forms.Form): - sendto = forms.MultipleChoiceField( - label=_("Send to"), widget=forms.CheckboxSelectMultiple, - choices=Order.STATUS_CHOICE - ) + sendto = forms.MultipleChoiceField() # overridden later subject = forms.CharField(label=_("Subject")) message = forms.CharField(label=_("Message")) @@ -24,3 +21,12 @@ class MailForm(forms.Form): widget=I18nTextarea, required=True, langcodes=event.settings.get('locales') ) + choices = list(Order.STATUS_CHOICE) + if not event.settings.get('payment_term_expire_automatically', as_type=bool): + choices.append( + ('overdue', _('pending with payment overdue')) + ) + self.fields['sendto'] = forms.MultipleChoiceField( + label=_("Send to"), widget=forms.CheckboxSelectMultiple, + choices=choices + ) diff --git a/src/pretix/plugins/sendmail/views.py b/src/pretix/plugins/sendmail/views.py index 5ded39d3c6..a076d642af 100644 --- a/src/pretix/plugins/sendmail/views.py +++ b/src/pretix/plugins/sendmail/views.py @@ -1,7 +1,9 @@ import logging from django.contrib import messages +from django.db.models import Q from django.shortcuts import redirect +from django.utils.timezone import now from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView @@ -25,17 +27,18 @@ class SenderView(EventPermissionRequiredMixin, FormView): return kwargs def form_valid(self, form): - orders = Order.objects.filter( - event=self.request.event, status__in=form.cleaned_data['sendto'] - ) - mails = set([(o.email, o.locale) for o in orders]) + qs = Order.objects.filter(event=self.request.event) + statusq = Q(status__in=form.cleaned_data['sendto']) + if 'overdue' in form.cleaned_data['sendto']: + statusq |= Q(status=Order.STATUS_PENDING, expires__lt=now()) + orders = qs.filter(statusq) self.request.event.log_action('pretix.plugins.sendmail.sent', user=self.request.user, data=dict( form.cleaned_data)) - for m, l in mails: - mail(m, form.cleaned_data['subject'], form.cleaned_data['message'], - None, self.request.event, locale=l) + for o in orders: + mail(o.email, form.cleaned_data['subject'], form.cleaned_data['message'], + None, self.request.event, locale=o.locale, order=o) messages.success(self.request, _('Your message will be sent to the selected users.'))