import datetime from django.contrib import admin from django.db.models import Sum from django.contrib.gis.admin import OSMGeoAdmin from django.conf.urls import patterns from django.conf.urls import url from django.shortcuts import render from .models import Gig class GigAdmin(OSMGeoAdmin): list_display = ('title', 'status', 'payment_status', 'invoice_date', 'payment', 'publisher', 'pub_date', 'word_count') list_filter = ('publisher', 'status', 'payment_status') fieldsets = ( ('Gig', { 'fields': ( 'title', 'pitch', ('created', 'due_date'), ('payment', 'pay_type', 'payment_status', 'invoice_date'), ('status', 'pub_date', 'word_count'), 'publisher', 'pub_item' ), 'classes': ( 'show', 'extrapretty', 'wide' ) } ), ) def get_urls(self): urls = super(GigAdmin, self).get_urls() custom_urls = [ url( r'^monthly/$', self.admin_site.admin_view(self.get_monthly), name='monthly_admin' ) ] return custom_urls + urls def get_monthly(self, request): context = { 'title': ("This month's income"), 'app_label': self.model._meta.app_label, 'opts': self.model._meta, 'has_change_permission': self.has_change_permission(request) } try: year = request.GET["m"].split("-")[0] month = request.GET["m"].split("-")[1] except: year = datetime.datetime.now().strftime('%Y') month = datetime.datetime.now().strftime('%m') qs = self.model.objects.filter( created__year=year, created__month=month, status__in=[1, 2, 3] ) context['pitched'] = self.model.objects.filter( created__year=year, created__month=month, status=0 ) context['date'] = datetime.datetime.now() context['billed'] = qs.filter(payment_status=1) context['billed_total'] = qs.filter(payment_status=1).aggregate(total_payment=Sum('payment')) context['unbilled'] = qs.filter(payment_status=0) context['unbilled_total'] = qs.filter(payment_status=0).aggregate(total_payment=Sum('payment')) context['total_outstanding'] = qs.aggregate(total_payment=Sum('payment')) context['months'] = self.model.objects.dates('created', 'month') return render(request, 'admin/income_month.html', context) admin.site.register(Gig, GigAdmin)