Mercurial > public > sg101
view donations/management/commands/donations_report.py @ 629:f4c043cf55ac
Wiki integration. Requests don't always have sessions.
In particular this occurs when a request is made without a trailing slash.
The Common middleware redirects when this happens, and the middleware
process_request() processing stops before a session can get added.
So just set an attribute on the request object for each operation.
This seemed weird to me at first, but there are plenty of examples of this
in the Django code base already.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Tue, 13 Nov 2012 13:50:06 -0600 |
parents | 08d83015e15d |
children | 161b56849114 |
line wrap: on
line source
"""donations_report.py A management command to display donation statistics for a given year. """ import datetime import decimal from django.core.management.base import LabelCommand, CommandError from django.db.models import Sum from donations.models import Donation ROW_FMT = '%10s %7s %7s' class Command(LabelCommand): help = "Display donation statistics for a given year" args = "<year>" def handle_label(self, year, **kwargs): """Display donation statistics for a given year""" try: year = int(year) except ValueError: raise CommandError("invalid year") today = datetime.date.today() if year < 2011 or year > today.year: raise CommandError("invalid year") max_month = 12 if year != today.year else today.month print ROW_FMT % ('Month', 'Gross', 'Net') sep = ROW_FMT % ('-' * 10, '-' * 7, '-' * 7) print sep total_gross = decimal.Decimal() total_net = decimal.Decimal() for month in range(1, max_month + 1): r = Donation.objects.filter( payment_date__year=year, payment_date__month=month).aggregate( Sum('mc_gross'), Sum('mc_fee')) gross, fee = r['mc_gross__sum'], r['mc_fee__sum'] gross = gross if gross else decimal.Decimal() fee = fee if fee else decimal.Decimal() net = gross - fee d = datetime.date(year=year, month=month, day=1) print ROW_FMT % (d.strftime('%b %Y'), gross, net) total_gross += gross total_net += net print sep print ROW_FMT % ('Total:', total_gross, total_net)