+def dollar_field(fieldName, short_description):
+ def newFunc(self, obj):
+ try:
+ x= "$ %0.2f" % float(getattr(obj, fieldName, 0.0))
+ except:
+ x=getattr(obj, fieldName, 0.0)
+ return x
+ newFunc.short_description = short_description
+ return newFunc
+
+def right_dollar_field(fieldName, short_description):
+ def newFunc(self, obj):
+ try:
+ #x= '<div align=right style="width:6em">$ %0.2f</div>' % float(getattr(obj, fieldName, 0.0))
+ x= '<div align=right>$ %0.2f</div>' % float(getattr(obj, fieldName, 0.0))
+ except:
+ x=getattr(obj, fieldName, 0.0)
+ return x
+ newFunc.short_description = short_description
+ newFunc.allow_tags = True
+ return newFunc
+
+class InvoiceChargeInline(PlStackTabularInline):
+ model = Charge
+ extra = 0
+ verbose_name_plural = "Charges"
+ verbose_name = "Charge"
+ exclude = ['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", "dollar_amount"]
+ readonly_fields = ["date", "account", "dollar_amount"]
+
+ dollar_amount = dollar_field("amount", "Amount")
+
+class InvoiceInline(PlStackTabularInline):
+ model = Invoice
+ extra = 0
+ verbose_name_plural = "Invoices"
+ verbose_name = "Invoice"
+ fields = ["date", "dollar_amount"]
+ readonly_fields = ["date", "dollar_amount"]
+ suit_classes = 'suit-tab suit-tab-accountinvoice'
+ can_delete=False
+ max_num=0
+
+ dollar_amount = right_dollar_field("amount", "Amount")
+
+class PendingChargeInline(PlStackTabularInline):
+ model = Charge
+ extra = 0
+ verbose_name_plural = "Charges"
+ verbose_name = "Charge"
+ exclude = ["invoice"]
+ fields = ["date", "kind", "state", "object", "coreHours", "dollar_amount", "slice"]
+ readonly_fields = ["date", "kind", "state", "object", "coreHours", "dollar_amount", "slice"]
+ suit_classes = 'suit-tab suit-tab-accountpendingcharges'
+ can_delete=False
+ max_num=0
+
+ def queryset(self, request):
+ qs = super(PendingChargeInline, self).queryset(request)
+ qs = qs.filter(state="pending")
+ return qs
+
+ dollar_amount = right_dollar_field("amount", "Amount")
+
+class PaymentInline(PlStackTabularInline):
+ model=Payment
+ extra = 1
+ verbose_name_plural = "Payments"
+ verbose_name = "Payment"
+ fields = ["date", "dollar_amount"]
+ readonly_fields = ["date", "dollar_amount"]
+ suit_classes = 'suit-tab suit-tab-accountpayments'
+ can_delete=False
+ max_num=0
+
+ dollar_amount = right_dollar_field("amount", "Amount")
+
+class AccountAdmin(admin.ModelAdmin):
+ list_display = ("site", "balance_due")
+
+ inlines = [InvoiceInline, PaymentInline, PendingChargeInline]
+
+ fieldsets = [
+ (None, {'fields': ['site', 'dollar_balance_due', 'dollar_total_invoices', 'dollar_total_payments'],'classes':['suit-tab suit-tab-general']}),]
+
+ readonly_fields = ['site', 'dollar_balance_due', 'dollar_total_invoices', 'dollar_total_payments']
+
+ suit_form_tabs =(
+ ('general','Account Details'),
+ ('accountinvoice', 'Invoices'),
+ ('accountpayments', 'Payments'),
+ ('accountpendingcharges','Pending Charges'),
+ )
+
+ dollar_balance_due = dollar_field("balance_due", "Balance Due")
+ dollar_total_invoices = dollar_field("total_invoices", "Total Invoices")
+ dollar_total_payments = dollar_field("total_payments", "Total Payments")
+