Adds preview function to nag_unpaid

This commit is contained in:
Christopher Neugebauer 2017-01-08 09:42:40 +11:00
parent 221b4d6a22
commit 06fe8a8ffa
2 changed files with 29 additions and 3 deletions

View file

@ -414,6 +414,15 @@ def staff_products_formset_factory(user):
class InvoiceNagForm(forms.Form): class InvoiceNagForm(forms.Form):
ACTION_PREVIEW = 1
ACTION_SEND = 2
ACTION_CHOICES = (
(ACTION_PREVIEW, "Preview"),
(ACTION_SEND, "Send emails"),
)
invoice = forms.ModelMultipleChoiceField( invoice = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple, widget=forms.CheckboxSelectMultiple,
queryset=commerce.Invoice.objects.all(), queryset=commerce.Invoice.objects.all(),
@ -423,6 +432,12 @@ class InvoiceNagForm(forms.Form):
body = forms.CharField( body = forms.CharField(
widget=forms.Textarea, widget=forms.Textarea,
) )
action = forms.TypedChoiceField(
widget=forms.RadioSelect,
coerce=int,
choices=ACTION_CHOICES,
initial=ACTION_PREVIEW,
)
def __init__(self, *a, **k): def __init__(self, *a, **k):
category = k.pop('category', None) or [] category = k.pop('category', None) or []

View file

@ -920,6 +920,11 @@ def extend_reservation(request, user_id, days=7):
return redirect(request.META["HTTP_REFERER"]) return redirect(request.META["HTTP_REFERER"])
Email = namedtuple(
"Email",
("subject", "body", "from_email", "recipient_list"),
)
@user_passes_test(_staff_only) @user_passes_test(_staff_only)
def nag_unpaid(request): def nag_unpaid(request):
''' Allows staff to nag users with unpaid invoices. ''' ''' Allows staff to nag users with unpaid invoices. '''
@ -933,6 +938,8 @@ def nag_unpaid(request):
product=product, product=product,
) )
emails = []
if form.is_valid(): if form.is_valid():
emails = [] emails = []
for invoice in form.cleaned_data["invoice"]: for invoice in form.cleaned_data["invoice"]:
@ -945,12 +952,16 @@ def nag_unpaid(request):
}) })
) )
recipient_list = [invoice.user.email] recipient_list = [invoice.user.email]
emails.append((subject, body, from_email, recipient_list)) emails.append(Email(subject, body, from_email, recipient_list))
if form.cleaned_data["action"] == forms.InvoiceNagForm.ACTION_SEND:
# Send e-mails *ONLY* if we're sending.
send_mass_mail(emails) send_mass_mail(emails)
messages.info(request, "The e-mails have been sent.") messages.info(request, "The e-mails have been sent.")
data = { data = {
"form": form, "form": form,
"emails": emails,
} }
return render(request, "registrasion/nag_unpaid.html", data) return render(request, "registrasion/nag_unpaid.html", data)