add invoice drilldown, move billing link to above location field in site
[plstackapi.git] / planetstack / core / admin.py
index 91a1864..988a766 100644 (file)
@@ -12,6 +12,7 @@ from django.contrib.auth.forms import ReadOnlyPasswordHashField
 from django.contrib.auth.signals import user_logged_in
 from django.utils import timezone
 from django.contrib.contenttypes import generic
+from django.core.urlresolvers import reverse
 from suit.widgets import LinkedSelect
 
 import django_evolution 
@@ -281,7 +282,7 @@ class ServiceAdmin(PlanetStackBaseAdmin):
 
 class SiteAdmin(PlanetStackBaseAdmin):
     fieldsets = [
-        (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base', 'location'], 'classes':['suit-tab suit-tab-general']}),
+        (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base', 'accountLink', 'location'], 'classes':['suit-tab suit-tab-general']}),
         ('Deployment Networks', {'fields': ['deployments'], 'classes':['suit-tab suit-tab-deployments']}),
     ]
     suit_form_tabs =(('general', 'Site Details'),
@@ -289,9 +290,10 @@ class SiteAdmin(PlanetStackBaseAdmin):
         ('siteprivileges','Privileges'),
         ('deployments','Deployments'),
         ('slices','Slices'),
-        ('nodes','Nodes'), 
+        ('nodes','Nodes'),
         ('tags','Tags'),
     )
+    readonly_fields = ['accountLink']
     list_display = ('name', 'login_base','site_url', 'enabled')
     filter_horizontal = ('deployments',)
     inlines = [SliceInline,UserInline,TagInline, NodeInline, SitePrivilegeInline]
@@ -326,6 +328,17 @@ class SiteAdmin(PlanetStackBaseAdmin):
                 inline.model.caller = request.user
             yield inline.get_formset(request, obj)
 
+    def accountLink(self, obj):
+        link_obj = obj.accounts.all()
+        if link_obj:
+            reverse_path = "admin:core_account_change"
+            url = reverse(reverse_path, args =(link_obj[0].id,))
+            return "<a href='%s'>%s</a>" % (url, "view billing details")
+        else:
+            return "no billing data for this site"
+    accountLink.allow_tags = True
+    accountLink.short_description = "Billing"
+
 class SitePrivilegeAdmin(PlanetStackBaseAdmin):
     fieldsets = [
         (None, {'fields': ['user', 'site', 'role'], 'classes':['collapse']})
@@ -929,16 +942,23 @@ class InvoiceChargeInline(admin.TabularInline):
     extra = 0
     verbose_name_plural = "Charges"
     verbose_name = "Charge"
-    exclude = ['enacted']
-    readonly_fields = ["date", "kind", "state", "object", "coreHours", "amount", "slice"]
+    exclude = ['enacted', 'account']
+    fields = ["date", "kind", "state", "object", "coreHours", "dollar_amount", "slice"]
+    readonly_fields = ["date", "kind", "state", "object", "coreHours", "dollar_amount", "slice"]
+    can_delete = False
+    max_num = 0
+
+    dollar_amount = right_dollar_field("amount", "Amount")
 
 class InvoiceAdmin(admin.ModelAdmin):
     list_display = ("date", "account")
 
     inlines = [InvoiceChargeInline]
 
-    fields = ["date", "account", "amount"]
-    readonly_fields = ["date", "account", "amount"]
+    fields = ["date", "account", "dollar_amount"]
+    readonly_fields = ["date", "account", "dollar_amount"]
+
+    dollar_amount = dollar_field("amount", "Amount")
 
 class InvoiceInline(admin.TabularInline):
     model = Invoice
@@ -946,14 +966,21 @@ class InvoiceInline(admin.TabularInline):
     verbose_name_plural = "Invoices"
     verbose_name = "Invoice"
     exclude = ['enacted']
-    fields = ["date", "dollar_amount"]
-    readonly_fields = ["date", "dollar_amount"]
+    fields = ["date", "dollar_amount", "invoiceLink"]
+    readonly_fields = ["date", "dollar_amount", "invoiceLink"]
     suit_classes = 'suit-tab suit-tab-accountinvoice'
     can_delete=False
     max_num=0
 
     dollar_amount = right_dollar_field("amount", "Amount")
 
+    def invoiceLink(self, obj):
+        reverse_path = "admin:core_invoice_change"
+        url = reverse(reverse_path, args =(obj.id,))
+        return "<a href='%s'>%s</a>" % (url, "details")
+    invoiceLink.allow_tags = True
+    invoiceLink.short_description = "Details"
+
 class PendingChargeInline(admin.TabularInline):
     model = Charge
     extra = 0
@@ -1027,7 +1054,7 @@ admin.site.unregister(Evolution)
 showAll = True
 
 admin.site.register(Account, AccountAdmin)
-#admin.site.register(Invoice, InvoiceAdmin)
+admin.site.register(Invoice, InvoiceAdmin)
 
 admin.site.register(Deployment, DeploymentAdmin)
 admin.site.register(Site, SiteAdmin)