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 url from django.shortcuts import render from .models import Gig, Invoice, InvoiceItem @admin.register(InvoiceItem) class InvoiceItemAdmin(admin.ModelAdmin): list_display = ('time_start', 'time_end', 'work_done') @admin.register(Invoice) class InvoiceAdmin(admin.ModelAdmin): list_display = ('title', 'admin_link', 'date_start', 'date_end') @admin.register(Gig) class GigAdmin(OSMGeoAdmin): list_display = ('title', 'status', 'due_date', 'payment_status', 'payment', 'publisher', '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)