Refs #131 -- Allow manual reissuing of invoices

This commit is contained in:
Raphael Michel
2016-08-05 11:33:28 +02:00
parent a22262aa30
commit 47682fd243
5 changed files with 54 additions and 10 deletions

View File

@@ -16,6 +16,9 @@ def pretixcontrol_logentry_display(sender, logentry, **kwargs):
'pretix.event.order.refunded': _('The order has been refunded.'), 'pretix.event.order.refunded': _('The order has been refunded.'),
'pretix.event.order.cancelled': _('The order has been cancelled.'), 'pretix.event.order.cancelled': _('The order has been cancelled.'),
'pretix.event.order.placed': _('The order has been created.'), 'pretix.event.order.placed': _('The order has been created.'),
'pretix.event.order.invoice.generated': _('The invoice has been generated.'),
'pretix.event.order.invoice.regenerated': _('The invoice has been regenerated.'),
'pretix.event.order.invoice.reissued': _('The invoice has been reissued.'),
} }
if logentry.action_type in plains: if logentry.action_type in plains:
return plains[logentry.action_type] return plains[logentry.action_type]

View File

@@ -110,9 +110,18 @@
action="{% url "control:event.order.regeninvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code id=i.pk %}"> action="{% url "control:event.order.regeninvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code id=i.pk %}">
{% csrf_token %} {% csrf_token %}
<button class="btn btn-default btn-xs"> <button class="btn btn-default btn-xs">
{% trans "Regenerate invoice" %} {% trans "Regenerate" %}
</button> </button>
</form> </form>
{% if not i.is_cancellation %}
<form class="form-inline helper-display-inline" method="post"
action="{% url "control:event.order.reissueinvoice" 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 "Cancel and reissue" %}
</button>
</form>
{% endif %}
{% endif %} {% endif %}
{% if forloop.revcounter0 > 0 %} {% if forloop.revcounter0 > 0 %}
<br/> <br/>

View File

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

View File

@@ -18,7 +18,8 @@ from pretix.base.models import (
from pretix.base.services import tickets from pretix.base.services import tickets
from pretix.base.services.export import export from pretix.base.services.export import export
from pretix.base.services.invoices import ( from pretix.base.services.invoices import (
generate_invoice, invoice_pdf, invoice_qualified, regenerate_invoice, generate_cancellation, generate_invoice, invoice_pdf, invoice_qualified,
regenerate_invoice,
) )
from pretix.base.services.mail import mail from pretix.base.services.mail import mail
from pretix.base.services.orders import cancel_order, mark_order_paid from pretix.base.services.orders import cancel_order, mark_order_paid
@@ -229,7 +230,7 @@ class OrderInvoiceCreate(OrderView):
messages.error(self.request, _('An invoice for this order already exists.')) messages.error(self.request, _('An invoice for this order already exists.'))
else: else:
inv = generate_invoice(self.order) inv = generate_invoice(self.order)
self.order.log_action('pretix.event.order.invoice.generate', user=self.request.user, data={ self.order.log_action('pretix.event.order.invoice.generated', user=self.request.user, data={
'invoice': inv.pk 'invoice': inv.pk
}) })
messages.success(self.request, _('The invoice has been generated.')) messages.success(self.request, _('The invoice has been generated.'))
@@ -247,12 +248,39 @@ class OrderInvoiceRegenerate(OrderView):
inv = self.order.invoices.get(pk=kwargs.get('id')) inv = self.order.invoices.get(pk=kwargs.get('id'))
except Order.DoesNotExist: except Order.DoesNotExist:
messages.error(self.request, _('Unknown invoice.')) messages.error(self.request, _('Unknown invoice.'))
else:
if inv.canceled:
messages.error(self.request, _('The invoice has already been canceled.'))
else:
inv = regenerate_invoice(inv)
self.order.log_action('pretix.event.order.invoice.regenerated', user=self.request.user, data={
'invoice': inv.pk
})
messages.success(self.request, _('The invoice has been regenerated.'))
return redirect(self.get_order_url())
inv = regenerate_invoice(inv) def get(self, *args, **kwargs):
self.order.log_action('pretix.event.order.invoice.regenerate', user=self.request.user, data={ return HttpResponseNotAllowed(['POST'])
'invoice': inv.pk
})
messages.success(self.request, _('The invoice has been regenerated.')) class OrderInvoiceReissue(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.'))
else:
if inv.canceled:
messages.error(self.request, _('The invoice has already been canceled.'))
else:
generate_cancellation(inv)
inv = generate_invoice(self.order)
self.order.log_action('pretix.event.order.invoice.reissued', user=self.request.user, data={
'invoice': inv.pk
})
messages.success(self.request, _('The invoice has been reissued.'))
return redirect(self.get_order_url()) return redirect(self.get_order_url())
def get(self, *args, **kwargs): def get(self, *args, **kwargs):

View File

@@ -166,8 +166,10 @@ class OrderInvoiceCreate(EventViewMixin, OrderDetailMixin, View):
elif self.order.invoices.exists(): elif self.order.invoices.exists():
messages.error(self.request, _('An invoice for this order already exists.')) messages.error(self.request, _('An invoice for this order already exists.'))
else: else:
generate_invoice(self.order) i = generate_invoice(self.order)
self.order.log_action('pretix.event.order.invoice.generate') self.order.log_action('pretix.event.order.invoice.generated', data={
'invoice': i.pk
})
messages.success(self.request, _('The invoice has been generated.')) messages.success(self.request, _('The invoice has been generated.'))
return redirect(self.get_order_url()) return redirect(self.get_order_url())