Refs #126 -- Show order history

This commit is contained in:
Raphael Michel
2016-03-22 13:04:38 +01:00
parent 6280e06e7c
commit 70067fd91a
9 changed files with 259 additions and 173 deletions

View File

@@ -33,7 +33,6 @@ def cached_file_delete(sender, instance, **kwargs):
class LoggingMixin: class LoggingMixin:
logentries = GenericRelation('LogEntry')
def log_action(self, action, data=None, user=None): def log_action(self, action, data=None, user=None):
""" """
@@ -59,6 +58,10 @@ class LoggingMixin:
class LoggedModel(models.Model, LoggingMixin): class LoggedModel(models.Model, LoggingMixin):
logentries = GenericRelation('LogEntry')
class Meta: class Meta:
abstract = True abstract = True
def all_logentries(self):
return self.logentries.all().select_related('user')

View File

@@ -28,3 +28,14 @@ class LogEntry(models.Model):
event = models.ForeignKey('Event', null=True, blank=True, on_delete=models.CASCADE) event = models.ForeignKey('Event', null=True, blank=True, on_delete=models.CASCADE)
action_type = models.CharField(max_length=255) action_type = models.CharField(max_length=255)
data = models.TextField(default='{}') data = models.TextField(default='{}')
class Meta:
ordering = ('-datetime', )
def display(self):
from ..signals import logentry_display
for receiver, response in logentry_display.send(self.event, logentry=self):
if response:
return response
return self.action_type

View File

@@ -87,3 +87,11 @@ as the first argument.
order_paid = EventPluginSignal( order_paid = EventPluginSignal(
providing_args=["order"] providing_args=["order"]
) )
"""
This signal is sent out every time we need to display a LogEntry object and we
don't know how to turn it into human-readable text.
"""
logentry_display = EventPluginSignal(
providing_args=["logentry"]
)

View File

@@ -7,5 +7,6 @@ class PretixControlConfig(AppConfig):
def ready(self): def ready(self):
from .views import dashboards # noqa from .views import dashboards # noqa
from . import logdisplay # noqa
default_app_config = 'pretix.control.PretixControlConfig' default_app_config = 'pretix.control.PretixControlConfig'

View File

@@ -0,0 +1,20 @@
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _
from pretix.base.signals import logentry_display
@receiver(signal=logentry_display, dispatch_uid="pretixcontrol_logentry_display")
def pretixcontrol_logentry_display(sender, logentry, **kwargs):
plains = {
'pretix.event.order.modified': _('The order details have been modified.'),
'pretix.event.order.unpaid': _('The order has been marked as unpaid.'),
'pretix.event.order.resend': _('The link to the order detail page has been resent to the user.'),
'pretix.event.order.expirychanged': _('The order\'s expiry date has been changed.'),
'pretix.event.order.paid': _('The order has been marked as paid.'),
'pretix.event.order.refunded': _('The order has been refunded.'),
'pretix.event.order.cancelled': _('The order has been cancelled.'),
'pretix.event.order.placed': _('The order has been created.'),
}
if logentry.action_type in plains:
return plains[logentry.action_type]

View File

@@ -0,0 +1,16 @@
<ul class="list-group">
{% for log in obj.all_logentries %}
<li class="list-group-item logentry">
<p class="meta">
<span class="fa fa-clock-o"></span> {{ log.datetime|date:"SHORT_DATETIME_FORMAT" }}
{% if log.user %}
<br/><span class="fa fa-user"></span> {{ log.user }}
{% endif %}
</p>
<p>
{{ log.display }}
</p>
</li>
{% endfor %}
</ul>

View File

@@ -47,6 +47,9 @@
</form> </form>
{% endif %} {% endif %}
{% endif %} {% endif %}
<div class="row">
<div class="col-xs-12 col-lg-10">
<div class="panel panel-primary items"> <div class="panel panel-primary items">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"> <h3 class="panel-title">
@@ -229,4 +232,17 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
</div>
<div class="col-xs-12 col-lg-2">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Order history" %}
</h3>
</div>
{% include "pretixcontrol/includes/logs.html" with obj=order %}
</div>
</div>
</div>
{% endblock %} {% endblock %}

View File

@@ -180,7 +180,7 @@ class OrderTransition(OrderView):
self.order.status = Order.STATUS_PENDING self.order.status = Order.STATUS_PENDING
self.order.payment_manual = True self.order.payment_manual = True
self.order.save() self.order.save()
self.order.log_action('pretix.base.order.unpaid', user=self.request.user) self.order.log_action('pretix.event.order.unpaid', user=self.request.user)
messages.success(self.request, _('The order has been marked as not paid.')) messages.success(self.request, _('The order has been marked as not paid.'))
elif self.order.status == 'p' and to == 'r': elif self.order.status == 'p' and to == 'r':
ret = self.payment_provider.order_control_refund_perform(self.request, self.order) ret = self.payment_provider.order_control_refund_perform(self.request, self.order)
@@ -221,7 +221,7 @@ class OrderResendLink(OrderView):
self.order.event, locale=self.order.locale self.order.event, locale=self.order.locale
) )
messages.success(self.request, _('The email has been queued to be sent.')) messages.success(self.request, _('The email has been queued to be sent.'))
self.order.log_action('pretix.base.order.resend', user=self.request.user) self.order.log_action('pretix.event.order.resend', user=self.request.user)
return redirect(self.get_order_url()) return redirect(self.get_order_url())
@@ -305,7 +305,7 @@ class OrderExtend(OrderView):
if self.form.is_valid(): if self.form.is_valid():
if oldvalue > now(): if oldvalue > now():
messages.success(self.request, _('The payment term has been changed.')) messages.success(self.request, _('The payment term has been changed.'))
self.order.log_action('pretix.order.changed', user=self.request.user, data={ self.order.log_action('pretix.event.order.expirychanged', user=self.request.user, data={
'expires': self.order.expires 'expires': self.order.expires
}) })
self.form.save() self.form.save()
@@ -315,7 +315,7 @@ class OrderExtend(OrderView):
is_available = self.order._is_still_available() is_available = self.order._is_still_available()
if is_available is True: if is_available is True:
self.form.save() self.form.save()
self.order.log_action('pretix.order.changed', user=self.request.user, data={ self.order.log_action('pretix.event.order.expirychanged', user=self.request.user, data={
'expires': self.order.expires 'expires': self.order.expires
}) })
messages.success(self.request, _('The payment term has been changed.')) messages.success(self.request, _('The payment term has been changed.'))

View File

@@ -16,6 +16,17 @@
display: none; display: none;
} }
} }
#sumtoggle { #sumtoggle {
margin-top: 20px; margin-top: 20px;
} }
.logentry {
.meta {
font-size: 12px;
margin: 0 0 5px;
}
p:last-child {
margin-bottom: 0;
}
}