annotate donations/management/commands/donations_report.py @ 645:99f7917702ca

Fix 081a88b3bfc8, javascript resize of forum images. Commit 081a88b3bfc8 broke those pages that loaded forums.js but did not load the imagesLoaded jQuery extension. Now we have arranged it so that only the forums topic view loads imagesLoaded and put the resizing javascript inline.
author Brian Neal <bgneal@gmail.com>
date Mon, 11 Mar 2013 15:30:25 -0500
parents 08d83015e15d
children 161b56849114
rev   line source
bgneal@621 1 """donations_report.py
bgneal@621 2
bgneal@621 3 A management command to display donation statistics for a given year.
bgneal@621 4
bgneal@621 5 """
bgneal@621 6 import datetime
bgneal@621 7 import decimal
bgneal@621 8
bgneal@621 9 from django.core.management.base import LabelCommand, CommandError
bgneal@621 10 from django.db.models import Sum
bgneal@621 11
bgneal@621 12 from donations.models import Donation
bgneal@621 13
bgneal@621 14 ROW_FMT = '%10s %7s %7s'
bgneal@621 15
bgneal@621 16
bgneal@621 17 class Command(LabelCommand):
bgneal@621 18 help = "Display donation statistics for a given year"
bgneal@621 19 args = "<year>"
bgneal@621 20
bgneal@621 21 def handle_label(self, year, **kwargs):
bgneal@621 22 """Display donation statistics for a given year"""
bgneal@621 23
bgneal@621 24 try:
bgneal@621 25 year = int(year)
bgneal@621 26 except ValueError:
bgneal@621 27 raise CommandError("invalid year")
bgneal@621 28
bgneal@621 29 today = datetime.date.today()
bgneal@621 30 if year < 2011 or year > today.year:
bgneal@621 31 raise CommandError("invalid year")
bgneal@621 32
bgneal@621 33 max_month = 12 if year != today.year else today.month
bgneal@621 34
bgneal@621 35 print ROW_FMT % ('Month', 'Gross', 'Net')
bgneal@621 36 sep = ROW_FMT % ('-' * 10, '-' * 7, '-' * 7)
bgneal@621 37 print sep
bgneal@621 38
bgneal@621 39 total_gross = decimal.Decimal()
bgneal@621 40 total_net = decimal.Decimal()
bgneal@621 41
bgneal@621 42 for month in range(1, max_month + 1):
bgneal@621 43 r = Donation.objects.filter(
bgneal@621 44 payment_date__year=year,
bgneal@621 45 payment_date__month=month).aggregate(
bgneal@621 46 Sum('mc_gross'), Sum('mc_fee'))
bgneal@621 47
bgneal@621 48 gross, fee = r['mc_gross__sum'], r['mc_fee__sum']
bgneal@621 49
bgneal@621 50 gross = gross if gross else decimal.Decimal()
bgneal@621 51 fee = fee if fee else decimal.Decimal()
bgneal@621 52
bgneal@621 53 net = gross - fee
bgneal@621 54
bgneal@621 55 d = datetime.date(year=year, month=month, day=1)
bgneal@621 56
bgneal@621 57 print ROW_FMT % (d.strftime('%b %Y'), gross, net)
bgneal@621 58
bgneal@621 59 total_gross += gross
bgneal@621 60 total_net += net
bgneal@621 61
bgneal@621 62 print sep
bgneal@621 63 print ROW_FMT % ('Total:', total_gross, total_net)