2017-02-05 11:31:25 +00:00
|
|
|
from django.contrib.admin.utils import quote
|
|
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from django.conf.urls import url
|
2017-02-09 22:13:28 +00:00
|
|
|
from rest_framework.renderers import JSONRenderer
|
2017-02-05 11:31:25 +00:00
|
|
|
|
2017-02-03 10:04:57 +00:00
|
|
|
from wagtail.contrib.modeladmin.options import (
|
|
|
|
ModelAdmin, modeladmin_register
|
|
|
|
)
|
2017-02-05 11:31:25 +00:00
|
|
|
from wagtail.contrib.modeladmin.helpers import ButtonHelper
|
|
|
|
from wagtail.contrib.modeladmin.views import InspectView
|
2017-02-17 09:03:21 +00:00
|
|
|
from longclaw.longclaworders.models import Order
|
|
|
|
from longclaw.longclaworders.serializers import OrderSerializer
|
2017-03-09 08:33:44 +00:00
|
|
|
from longclaw.settings import API_URL_PREFIX
|
2017-02-03 10:04:57 +00:00
|
|
|
|
2017-02-05 11:31:25 +00:00
|
|
|
class OrderButtonHelper(ButtonHelper):
|
|
|
|
|
2017-02-10 08:26:21 +00:00
|
|
|
detail_button_classnames = []
|
2017-02-05 11:31:25 +00:00
|
|
|
cancel_button_classnames = ['no']
|
|
|
|
|
|
|
|
def cancel_button(self, pk, classnames_add=None, classnames_exclude=None):
|
|
|
|
if classnames_add is None:
|
|
|
|
classnames_add = ['cancel-button']
|
|
|
|
if classnames_exclude is None:
|
|
|
|
classnames_exclude = []
|
|
|
|
classnames = self.cancel_button_classnames + classnames_add
|
|
|
|
cn = self.finalise_classname(classnames, classnames_exclude)
|
|
|
|
return {
|
|
|
|
'url': '',
|
|
|
|
'label': _('Cancel'),
|
|
|
|
'classname': cn,
|
|
|
|
'title': _('Cancel this %s') % self.verbose_name,
|
|
|
|
}
|
|
|
|
|
2017-02-10 08:26:21 +00:00
|
|
|
def detail_button(self, pk, classnames_add=None, classnames_exclude=None):
|
2017-02-05 11:31:25 +00:00
|
|
|
if classnames_add is None:
|
2017-02-10 08:26:21 +00:00
|
|
|
classnames_add = ['detail-button']
|
2017-02-05 11:31:25 +00:00
|
|
|
if classnames_exclude is None:
|
|
|
|
classnames_exclude = []
|
2017-02-10 08:26:21 +00:00
|
|
|
classnames = self.detail_button_classnames + classnames_add
|
2017-02-05 11:31:25 +00:00
|
|
|
cn = self.finalise_classname(classnames, classnames_exclude)
|
|
|
|
return {
|
2017-02-10 08:26:21 +00:00
|
|
|
'url': self.url_helper.get_action_url('detail', quote(pk)),
|
2017-02-08 11:24:49 +00:00
|
|
|
'label': _('View'),
|
2017-02-05 11:31:25 +00:00
|
|
|
'classname': cn,
|
2017-02-08 11:24:49 +00:00
|
|
|
'title': _('View this %s') % self.verbose_name,
|
2017-02-05 11:31:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
def get_buttons_for_obj(self, obj, exclude=None, classnames_add=None,
|
|
|
|
classnames_exclude=None):
|
|
|
|
if exclude is None:
|
|
|
|
exclude = []
|
|
|
|
if classnames_add is None:
|
|
|
|
classnames_add = []
|
|
|
|
if classnames_exclude is None:
|
|
|
|
classnames_exclude = []
|
|
|
|
|
|
|
|
ph = self.permission_helper
|
|
|
|
usr = self.request.user
|
|
|
|
pk = quote(getattr(obj, self.opts.pk.attname))
|
|
|
|
btns = []
|
|
|
|
if ph.user_can_inspect_obj(usr, obj):
|
2017-02-10 08:26:21 +00:00
|
|
|
btns.append(self.detail_button(
|
2017-02-09 22:13:28 +00:00
|
|
|
pk, classnames_add, classnames_exclude))
|
|
|
|
btns.append(self.cancel_button(
|
|
|
|
pk, classnames_add, classnames_exclude))
|
2017-02-05 11:31:25 +00:00
|
|
|
|
|
|
|
return btns
|
|
|
|
|
2017-02-09 22:13:28 +00:00
|
|
|
|
2017-02-10 08:26:21 +00:00
|
|
|
class DetailView(InspectView):
|
2017-02-08 11:24:49 +00:00
|
|
|
|
|
|
|
def get_page_title(self, **kwargs):
|
|
|
|
return "Order #{}".format(self.instance.id)
|
|
|
|
|
|
|
|
def get_page_subtitle(self, **kwargs):
|
|
|
|
return ''
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
context = {
|
2017-03-09 08:33:44 +00:00
|
|
|
'order_id': self.instance.id,
|
|
|
|
'api_url_prefix': API_URL_PREFIX
|
2017-02-08 11:24:49 +00:00
|
|
|
}
|
|
|
|
context.update(kwargs)
|
2017-02-10 08:26:21 +00:00
|
|
|
return super(DetailView, self).get_context_data(**context)
|
2017-02-08 11:24:49 +00:00
|
|
|
|
|
|
|
def get_template_names(self):
|
2017-02-10 08:26:21 +00:00
|
|
|
return 'orders_detail.html'
|
2017-02-05 11:31:25 +00:00
|
|
|
|
2017-02-09 22:13:28 +00:00
|
|
|
|
2017-02-03 10:04:57 +00:00
|
|
|
class OrderModelAdmin(ModelAdmin):
|
|
|
|
model = Order
|
|
|
|
menu_order = 100
|
|
|
|
menu_icon = 'list-ul'
|
|
|
|
add_to_settings_menu = False
|
|
|
|
exclude_from_explorer = False
|
2017-02-09 22:13:28 +00:00
|
|
|
list_display = ('id', 'status', 'status_note', 'email',
|
|
|
|
'payment_date', 'total_items', 'total')
|
2017-02-03 10:04:57 +00:00
|
|
|
list_filter = ('status', 'payment_date', 'email')
|
|
|
|
inspect_view_enabled = True
|
2017-02-10 08:26:21 +00:00
|
|
|
detail_view_class = DetailView
|
2017-02-05 11:31:25 +00:00
|
|
|
button_helper_class = OrderButtonHelper
|
|
|
|
|
2017-02-10 08:26:21 +00:00
|
|
|
def detail_view(self, request, instance_pk):
|
2017-02-05 11:31:25 +00:00
|
|
|
"""
|
|
|
|
Instantiates a class-based view to provide 'inspect' functionality for
|
|
|
|
the assigned model. The view class used can be overridden by changing
|
|
|
|
the 'inspect_view_class' attribute.
|
|
|
|
"""
|
|
|
|
kwargs = {'model_admin': self, 'instance_pk': instance_pk}
|
2017-02-10 08:26:21 +00:00
|
|
|
view_class = self.detail_view_class
|
2017-02-05 11:31:25 +00:00
|
|
|
return view_class.as_view(**kwargs)(request)
|
|
|
|
|
|
|
|
def get_admin_urls_for_registration(self):
|
|
|
|
"""
|
|
|
|
Utilised by Wagtail's 'register_admin_urls' hook to register urls for
|
|
|
|
our the views that class offers.
|
|
|
|
"""
|
|
|
|
urls = super(OrderModelAdmin, self).get_admin_urls_for_registration()
|
|
|
|
urls = urls + (
|
2017-02-10 08:26:21 +00:00
|
|
|
url(self.url_helper.get_action_url_pattern('detail'),
|
|
|
|
self.detail_view,
|
|
|
|
name=self.url_helper.get_action_url_name('detail')),
|
2017-02-05 11:31:25 +00:00
|
|
|
)
|
|
|
|
return urls
|
2017-02-03 10:04:57 +00:00
|
|
|
|
|
|
|
modeladmin_register(OrderModelAdmin)
|