Sendmail: Allow manual payment reminders

This commit is contained in:
Raphael Michel
2016-08-04 17:55:44 +02:00
parent 39ada8954e
commit 17d5221579
2 changed files with 20 additions and 11 deletions

View File

@@ -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
)

View File

@@ -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.'))