source: remit/finance_core/reporting.py @ 13e7c01

client
Last change on this file since 13e7c01 was 13e7c01, checked in by Alex Dehnert <adehnert@…>, 15 years ago

Minor refactoring of the reporting code

  • Property mode set to 100644
File size: 1.7 KB
Line 
1from decimal import Decimal
2from django.db.models import Sum
3
4def build_table_annotate(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis, ):
5    # Setup
6    arcprimary = {}
7    table = []
8    zero = Decimal('0.00')
9    for num, (pk, label, qobj, ) in enumerate(primary_axis):
10        arcprimary[pk] = num
11        table.append([zero]*len(secondary_axis))
12
13    def lineitem_total(obj):
14        if obj.lineitem__amount__sum is None: return zero
15        else: return obj.lineitem__amount__sum
16
17    # Do the real work
18    print secondary_axis
19    for num, (label, qobj_lineitem, qobj_primary) in enumerate(secondary_axis):
20        print num
21        secondary_results = (primary_axis_objs.filter(main_lineitem_limit_primary, qobj_primary, ).annotate(Sum('lineitem__amount')))
22        for cell in secondary_results:
23            #print cell, cell.pk, arcprimary[cell.pk], num, table[arcprimary[cell.pk]]
24            table[arcprimary[cell.pk]][num] = lineitem_total(cell)
25
26    return table
27
28def build_table_aggregate(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis):
29    # This uses a simpler but probably slower method
30    # In theory, if we grow unit tests, comparing this method with
31    # the one above using annotate would be a good idea
32    zero = Decimal('0.00')
33    def total_amount(queryset):
34        amount = queryset.aggregate(Sum('amount'))['amount__sum']
35        if amount is None: return zero
36        else: return amount
37    table = [ # Primary axis
38            [ # Secondary axis
39                total_amount(line_items.filter(primary[2], secondary[1]))
40            for secondary in secondary_axis]
41        for primary in primary_axis]
42
43    return table
44   
45
46build_table = build_table_annotate
Note: See TracBrowser for help on using the repository browser.