forked from CGM_Public/pretix_original
Track if invoices have been sent via email (#2231)
This commit is contained in:
@@ -234,7 +234,23 @@
|
||||
{% for i in invoices %}
|
||||
<a href="{% url "control:event.invoice.download" invoice=i.pk event=request.event.slug organizer=request.event.organizer.slug %}">
|
||||
{% if i.is_cancellation %}{% trans "Cancellation" context "invoice" %}{% else %}{% trans "Invoice" %}{% endif %}
|
||||
{{ i.number }}</a> ({{ i.date|date:"SHORT_DATE_FORMAT" }})
|
||||
{{ i.number }}</a>
|
||||
({{ i.date|date:"SHORT_DATE_FORMAT" }})
|
||||
{% if i.sent_to_customer.year == 1970 %}
|
||||
<span class="fa-stack fa-stack-small" data-toggle="tooltip" title="{% trans "We don't know if this invoice was emailed to the customer since it was created before our system tracked this information" %}">
|
||||
<span class="fa fa-background fa-envelope text-muted fa-stack-1x"></span>
|
||||
<span class="fa fa-question fa-stack-1x fa-stack-shifted"></span>
|
||||
</span>
|
||||
{% elif i.sent_to_customer %}
|
||||
<span class="fa-stack fa-stack-small" data-toggle="tooltip" title="{% trans "Invoice was emailed to customer" %}">
|
||||
<span class="fa fa-background fa-envelope text-muted fa-stack-1x"></span>
|
||||
<span class="fa fa-check text-success fa-stack-1x fa-stack-shifted"></span>
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="fa-stack fa-stack-small" data-toggle="tooltip" title="{% trans "Invoice was not yet emailed to customer" %}">
|
||||
<span class="fa fa-background fa-envelope text-muted fa-stack-1x"></span>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if not i.canceled %}
|
||||
{% if request.event.settings.invoice_regenerate_allowed %}
|
||||
<form class="form-inline helper-display-inline" method="post"
|
||||
@@ -268,6 +284,12 @@
|
||||
<br/>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if invoices_send_link %}
|
||||
<br/>
|
||||
<a class="btn btn-default btn-xs" href="{{ invoices_send_link }}">
|
||||
{% trans "Email invoices" %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if can_generate_invoice %}
|
||||
<br/>
|
||||
<form class="form-inline helper-display-inline" method="post"
|
||||
|
||||
@@ -65,7 +65,7 @@ from django.utils.formats import date_format, get_format
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.http import is_safe_url
|
||||
from django.utils.timezone import make_aware, now
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
from django.utils.translation import gettext, gettext_lazy as _, ngettext
|
||||
from django.views.generic import (
|
||||
DetailView, FormView, ListView, TemplateView, View,
|
||||
)
|
||||
@@ -313,6 +313,27 @@ class OrderDetail(OrderView):
|
||||
ctx['download_buttons'] = self.download_buttons
|
||||
ctx['payment_refund_sum'] = self.order.payment_refund_sum
|
||||
ctx['pending_sum'] = self.order.pending_sum
|
||||
|
||||
unsent_invoices = [ii.pk for ii in ctx['invoices'] if not ii.sent_to_customer]
|
||||
if unsent_invoices:
|
||||
ctx['invoices_send_link'] = reverse('control:event.order.sendmail', kwargs={
|
||||
'event': self.request.event.slug,
|
||||
'organizer': self.request.event.organizer.slug,
|
||||
'code': self.order.code
|
||||
}) + '?' + urlencode({
|
||||
'subject': ngettext('Your invoice', 'Your invoices', len(unsent_invoices)),
|
||||
'message': ngettext(
|
||||
'Hello,\n\nplease find your invoice attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
'Hello,\n\nplease find your invoices attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
len(unsent_invoices)
|
||||
).format(
|
||||
event="{event}",
|
||||
),
|
||||
'attach_invoices': unsent_invoices
|
||||
}, doseq=True)
|
||||
|
||||
return ctx
|
||||
|
||||
@cached_property
|
||||
@@ -1954,6 +1975,8 @@ class OrderSendMail(EventPermissionRequiredMixin, OrderViewMixin, FormView):
|
||||
kwargs['initial']['subject'] = self.request.GET.get('subject')
|
||||
if self.request.GET.get('message'):
|
||||
kwargs['initial']['message'] = self.request.GET.get('message')
|
||||
if self.request.GET.getlist('attach_invoices'):
|
||||
kwargs['initial']['attach_invoices'] = self.order.invoices.filter(pk__in=self.request.GET.getlist('attach_invoices'))
|
||||
return kwargs
|
||||
|
||||
def form_invalid(self, form):
|
||||
|
||||
Reference in New Issue
Block a user