forked from CGM_Public/pretix_original
Refs #126 -- Show order history
This commit is contained in:
@@ -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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
)
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
20
src/pretix/control/logdisplay.py
Normal file
20
src/pretix/control/logdisplay.py
Normal 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]
|
||||||
@@ -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>
|
||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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.'))
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user