Added select account template

This commit is contained in:
Marc Aymerich 2015-10-05 14:49:15 +00:00
parent 7128db2640
commit fe71ef72d6
4 changed files with 56 additions and 25 deletions

View File

@ -2,7 +2,7 @@ import copy
import re import re
from urllib.parse import parse_qsl from urllib.parse import parse_qsl
from django import forms from django import apps, forms
from django.conf.urls import url from django.conf.urls import url
from django.contrib import admin, messages from django.contrib import admin, messages
from django.contrib.admin.utils import unquote from django.contrib.admin.utils import unquote
@ -92,7 +92,7 @@ class AccountAdmin(ChangePasswordAdminMixin, auth.UserAdmin, ExtendedModelAdmin)
} }
context.update(extra_context or {}) context.update(extra_context or {})
return super(AccountAdmin, self).change_view( return super(AccountAdmin, self).change_view(
request, object_id, form_url, context) request, object_id, form_url=form_url, extra_context=context)
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
fieldsets = super(AccountAdmin, self).get_fieldsets(request, obj) fieldsets = super(AccountAdmin, self).get_fieldsets(request, obj)
@ -125,6 +125,7 @@ class AccountListAdmin(AccountAdmin):
""" Account list to allow account selection when creating new services """ """ Account list to allow account selection when creating new services """
list_display = ('select_account', 'username', 'type', 'username') list_display = ('select_account', 'username', 'type', 'username')
actions = None actions = None
change_list_template = 'admin/accounts/account/select_account_list.html'
def select_account(self, instance): def select_account(self, instance):
# TODO get query string from request.META['QUERY_STRING'] to preserve filters # TODO get query string from request.META['QUERY_STRING'] to preserve filters
@ -139,12 +140,13 @@ class AccountListAdmin(AccountAdmin):
select_account.admin_order_field = 'username' select_account.admin_order_field = 'username'
def changelist_view(self, request, extra_context=None): def changelist_view(self, request, extra_context=None):
original_app_label = request.META['PATH_INFO'].split('/')[-5] app_label = request.META['PATH_INFO'].split('/')[-5]
original_model = request.META['PATH_INFO'].split('/')[-4] model = request.META['PATH_INFO'].split('/')[-4]
model = apps.get_model(app_label, model)
opts = model._meta
context = { context = {
'title': _("Select account for adding a new %s") % (original_model), 'title': _("Select account for adding a new %s") % (opts.verbose_name),
'original_app_label': original_app_label, 'original_opts': opts,
'original_model': original_model,
} }
context.update(extra_context or {}) context.update(extra_context or {})
response = super(AccountListAdmin, self).changelist_view(request, extra_context=context) response = super(AccountListAdmin, self).changelist_view(request, extra_context=context)

View File

@ -0,0 +1,14 @@
{% extends 'admin/change_list.html' %}
{% load i18n admin_urls %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ original_opts.app_config.verbose_name }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ original_opts.verbose_name_plural|capfirst }}</a>
&rsaquo; {% trans 'Add' %}
&rsaquo; {% trans 'Select contact' %}
</div>
{% endblock %}

View File

@ -47,13 +47,14 @@ class BillLineInline(admin.TabularInline):
order_link = admin_link('order', display='pk') order_link = admin_link('order', display='pk')
def display_total(self, line): def display_total(self, line):
total = line.compute_total() if line.pk:
sublines = line.sublines.all() total = line.compute_total()
if sublines: sublines = line.sublines.all()
content = '\n'.join(['%s: %s' % (sub.description, sub.total) for sub in sublines]) if sublines:
img = static('admin/img/icon_alert.gif') content = '\n'.join(['%s: %s' % (sub.description, sub.total) for sub in sublines])
return '<span title="%s">%s <img src="%s"></img></span>' % (content, total, img) img = static('admin/img/icon_alert.gif')
return total return '<span title="%s">%s <img src="%s"></img></span>' % (content, total, img)
return total
display_total.short_description = _("Total") display_total.short_description = _("Total")
display_total.allow_tags = True display_total.allow_tags = True
@ -97,7 +98,8 @@ class ClosedBillLineInline(BillLineInline):
display_subtotal.allow_tags = True display_subtotal.allow_tags = True
def display_total(self, line): def display_total(self, line):
return line.compute_total() if line.pk:
return line.compute_total()
display_total.short_description = _("Total") display_total.short_description = _("Total")
display_total.allow_tags = True display_total.allow_tags = True
@ -110,8 +112,8 @@ class ClosedBillLineInline(BillLineInline):
class BillLineAdmin(admin.ModelAdmin): class BillLineAdmin(admin.ModelAdmin):
list_display = ( list_display = (
'description', 'bill_link', 'display_is_open', 'account_link', 'rate', 'quantity', 'tax', 'description', 'bill_link', 'display_is_open', 'account_link', 'rate', 'quantity',
'subtotal', 'display_sublinetotal', 'display_total' 'tax', 'subtotal', 'display_sublinetotal', 'display_total'
) )
actions = ( actions = (
actions.undo_billing, actions.move_lines, actions.copy_lines, actions.service_report actions.undo_billing, actions.move_lines, actions.copy_lines, actions.service_report
@ -201,7 +203,8 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
}), }),
(_("Dates"), { (_("Dates"), {
'classes': ('collapse',), 'classes': ('collapse',),
'fields': ('created_on_display', 'closed_on_display', 'updated_on_display', 'due_on'), 'fields': ('created_on_display', 'closed_on_display', 'updated_on_display',
'due_on'),
}), }),
(_("Raw"), { (_("Raw"), {
'classes': ('collapse',), 'classes': ('collapse',),
@ -219,7 +222,9 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
actions.amend_bills, actions.bill_report, actions.service_report, actions.amend_bills, actions.bill_report, actions.service_report,
actions.close_send_download_bills, list_accounts, actions.close_send_download_bills, list_accounts,
] ]
change_readonly_fields = ('account_link', 'type', 'is_open', 'amend_of_link', 'amend_links') change_readonly_fields = (
'account_link', 'type', 'is_open', 'amend_of_link', 'amend_links'
)
readonly_fields = ( readonly_fields = (
'number', 'display_total', 'is_sent', 'display_payment_state', 'created_on_display', 'number', 'display_total', 'is_sent', 'display_payment_state', 'created_on_display',
'closed_on_display', 'updated_on_display' 'closed_on_display', 'updated_on_display'
@ -265,7 +270,8 @@ class BillAdmin(AccountAdminMixin, ExtendedModelAdmin):
transactions = bill.transactions.all() transactions = bill.transactions.all()
if len(transactions) == 1: if len(transactions) == 1:
args = (transactions[0].pk,) args = (transactions[0].pk,)
url = reverse('admin:%s_%s_change' % (t_opts.app_label, t_opts.model_name), args=args) view = 'admin:%s_%s_change' % (t_opts.app_label, t_opts.model_name)
url = reverse(view, args=args)
else: else:
url = reverse('admin:%s_%s_changelist' % (t_opts.app_label, t_opts.model_name)) url = reverse('admin:%s_%s_changelist' % (t_opts.app_label, t_opts.model_name))
url += '?bill=%i' % bill.pk url += '?bill=%i' % bill.pk

View File

@ -11,7 +11,7 @@ from orchestra.admin.utils import admin_link, admin_date
class LogEntryAdmin(admin.ModelAdmin): class LogEntryAdmin(admin.ModelAdmin):
list_display = ( list_display = (
'id', 'display_message', 'display_action_time', 'user_link', 'display_action_time', 'user_link', 'display_message',
) )
list_filter = ( list_filter = (
'action_flag', 'action_flag',
@ -32,6 +32,10 @@ class LogEntryAdmin(admin.ModelAdmin):
user_link = admin_link('user') user_link = admin_link('user')
display_action_time = admin_date('action_time', short_description=_("Time")) display_action_time = admin_date('action_time', short_description=_("Time"))
def __init__(self, *args, **kwargs):
super(LogEntryAdmin, self).__init__(*args, **kwargs)
self.list_display_links = (None, )
def display_message(self, log): def display_message(self, log):
edit = '<a href="%(url)s"><img src="%(img)s"></img></a>' % { edit = '<a href="%(url)s"><img src="%(img)s"></img></a>' % {
'url': reverse('admin:admin_logentry_change', args=(log.pk,)), 'url': reverse('admin:admin_logentry_change', args=(log.pk,)),
@ -68,8 +72,9 @@ class LogEntryAdmin(admin.ModelAdmin):
def content_object_link(self, log): def content_object_link(self, log):
ct = log.content_type ct = log.content_type
view = 'admin:%s_%s_change' % (ct.app_label, ct.model)
try: try:
url = reverse('admin:%s_%s_change' % (ct.app_label, ct.model), args=(log.object_id,)) url = reverse(view, args=(log.object_id,))
except NoReverseMatch: except NoReverseMatch:
return log.object_repr return log.object_repr
return '<a href="%s">%s</a>' % (url, log.object_repr) return '<a href="%s">%s</a>' % (url, log.object_repr)
@ -87,7 +92,8 @@ class LogEntryAdmin(admin.ModelAdmin):
'object': obj, 'object': obj,
} }
context.update(extra_context or {}) context.update(extra_context or {})
return super(LogEntryAdmin, self).changeform_view(request, object_id, form_url, extra_context=context) return super(LogEntryAdmin, self).changeform_view(
request, object_id, form_url, extra_context=context)
def response_change(self, request, obj): def response_change(self, request, obj):
""" save and continue preserve edit query string """ """ save and continue preserve edit query string """
@ -100,9 +106,12 @@ class LogEntryAdmin(admin.ModelAdmin):
""" save redirect to object history """ """ save redirect to object history """
if 'edit' in request.GET.urlencode(): if 'edit' in request.GET.urlencode():
opts = obj.content_type.model_class()._meta opts = obj.content_type.model_class()._meta
post_url = reverse('admin:%s_%s_history' % (opts.app_label, opts.model_name), args=(obj.object_id,)) view = 'admin:%s_%s_history' % (opts.app_label, opts.model_name)
post_url = reverse(view, args=(obj.object_id,))
preserved_filters = self.get_preserved_filters(request) preserved_filters = self.get_preserved_filters(request)
post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url) post_url = add_preserved_filters({
'preserved_filters': preserved_filters, 'opts': opts
}, post_url)
return HttpResponseRedirect(post_url) return HttpResponseRedirect(post_url)
return super(LogEntryAdmin, self).response_post_save_change(request, obj) return super(LogEntryAdmin, self).response_post_save_change(request, obj)