Refs #131 -- Allow to regenerate an invoice

This commit is contained in:
Raphael Michel
2016-08-05 11:26:13 +02:00
parent a61792ed4e
commit a22262aa30
5 changed files with 91 additions and 3 deletions

View File

@@ -105,6 +105,15 @@
<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" %}{% else %}{% trans "Invoice" %}{% endif %}
{{ i.number }}</a> ({{ i.date|date:"SHORT_DATE_FORMAT" }})
{% if not i.canceled %}
<form class="form-inline helper-display-inline" method="post"
action="{% url "control:event.order.regeninvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code id=i.pk %}">
{% csrf_token %}
<button class="btn btn-default btn-xs">
{% trans "Regenerate invoice" %}
</button>
</form>
{% endif %}
{% if forloop.revcounter0 > 0 %}
<br/>
{% endif %}

View File

@@ -71,6 +71,8 @@ urlpatterns = [
name='event.order.resendlink'),
url(r'^orders/(?P<code>[0-9A-Z]+)/invoice$', orders.OrderInvoiceCreate.as_view(),
name='event.order.geninvoice'),
url(r'^orders/(?P<code>[0-9A-Z]+)/invoices/(?P<id>\d+)/regenerate$', orders.OrderInvoiceRegenerate.as_view(),
name='event.order.regeninvoice'),
url(r'^orders/(?P<code>[0-9A-Z]+)/extend$', orders.OrderExtend.as_view(),
name='event.order.extend'),
url(r'^orders/(?P<code>[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),

View File

@@ -18,7 +18,7 @@ from pretix.base.models import (
from pretix.base.services import tickets
from pretix.base.services.export import export
from pretix.base.services.invoices import (
generate_invoice, invoice_pdf, invoice_qualified,
generate_invoice, invoice_pdf, invoice_qualified, regenerate_invoice,
)
from pretix.base.services.mail import mail
from pretix.base.services.orders import cancel_order, mark_order_paid
@@ -228,8 +228,10 @@ class OrderInvoiceCreate(OrderView):
elif self.order.invoices.exists():
messages.error(self.request, _('An invoice for this order already exists.'))
else:
generate_invoice(self.order)
self.order.log_action('pretix.event.order.invoice.generate', user=self.request.user)
inv = generate_invoice(self.order)
self.order.log_action('pretix.event.order.invoice.generate', user=self.request.user, data={
'invoice': inv.pk
})
messages.success(self.request, _('The invoice has been generated.'))
return redirect(self.get_order_url())
@@ -237,6 +239,26 @@ class OrderInvoiceCreate(OrderView):
return HttpResponseNotAllowed(['POST'])
class OrderInvoiceRegenerate(OrderView):
permission = 'can_change_orders'
def post(self, *args, **kwargs):
try:
inv = self.order.invoices.get(pk=kwargs.get('id'))
except Order.DoesNotExist:
messages.error(self.request, _('Unknown invoice.'))
inv = regenerate_invoice(inv)
self.order.log_action('pretix.event.order.invoice.regenerate', user=self.request.user, data={
'invoice': inv.pk
})
messages.success(self.request, _('The invoice has been regenerated.'))
return redirect(self.get_order_url())
def get(self, *args, **kwargs):
return HttpResponseNotAllowed(['POST'])
class OrderResendLink(OrderView):
permission = 'can_change_orders'