diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py
index 2b860b55e..e6e0077c9 100644
--- a/src/pretix/control/forms/orders.py
+++ b/src/pretix/control/forms/orders.py
@@ -23,3 +23,15 @@ class ExporterForm(forms.Form):
data[k] = [m.pk for m in v]
return data
+
+
+class CommentForm(I18nModelForm):
+ class Meta:
+ model = Order
+ fields = ['comment']
+ widgets = {
+ 'comment': forms.Textarea(attrs={
+ 'rows': 3,
+ 'class': 'helper-width-100',
+ }),
+ }
diff --git a/src/pretix/control/logdisplay.py b/src/pretix/control/logdisplay.py
index 2addfca5d..9513929d1 100644
--- a/src/pretix/control/logdisplay.py
+++ b/src/pretix/control/logdisplay.py
@@ -19,6 +19,7 @@ def pretixcontrol_logentry_display(sender, logentry, **kwargs):
'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.'),
+ 'pretix.event.order.comment': _('The order\'s internal comment has been updated.'),
}
if logentry.action_type in plains:
return plains[logentry.action_type]
diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html
index 1016cdfa4..1e20a2eed 100644
--- a/src/pretix/control/templates/pretixcontrol/order/index.html
+++ b/src/pretix/control/templates/pretixcontrol/order/index.html
@@ -1,5 +1,6 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
+{% load bootstrap3 %}
{% load eventurl %}
{% block title %}
{% blocktrans trimmed with code=order.code %}
@@ -279,6 +280,25 @@
{% endif %}
+
+
+
+ {% trans "Internal comment" %}
+
+
+
+
diff --git a/src/pretix/control/urls.py b/src/pretix/control/urls.py
index a7a123670..410cc3647 100644
--- a/src/pretix/control/urls.py
+++ b/src/pretix/control/urls.py
@@ -77,6 +77,8 @@ urlpatterns = [
name='event.order.reissueinvoice'),
url(r'^orders/(?P[0-9A-Z]+)/extend$', orders.OrderExtend.as_view(),
name='event.order.extend'),
+ url(r'^orders/(?P[0-9A-Z]+)/comment$', orders.OrderComment.as_view(),
+ name='event.order.comment'),
url(r'^orders/(?P[0-9A-Z]+)/$', orders.OrderDetail.as_view(), name='event.order'),
url(r'^orders/(?P[0-9A-Z]+)/download/(?P