- Timestamp:
- Mar 27, 2010, 8:26:01 PM (15 years ago)
- Branches:
- master, client
- Children:
- d1692e8
- Parents:
- 47bb508
- git-author:
- Alex Dehnert <adehnert@…> (03/27/10 20:26:01)
- git-committer:
- Alex Dehnert <adehnert@…> (03/27/10 20:26:01)
- Location:
- remit/finance_core
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
remit/finance_core/reporting.py
ree37f93 r18149fd 25 25 return table 26 26 27 def build_table_valannotate(line_items, primary_field, secondary_field, primary_axis, secondary_axis, ): 28 # Setup 29 arcprimary = {} 30 arcsecondary = {} 31 table = [] 32 zero = Decimal('0.00') 33 for num, (pk, label, qobj, objrel_qobj) in enumerate(primary_axis): 34 arcprimary[pk] = num 35 table.append([zero]*len(secondary_axis)) 36 for num, (pk, label, qobj, objrel_qobj) in enumerate(secondary_axis): 37 arcsecondary[pk] = num 38 39 def lineitem_total(obj): 40 if obj['amount__sum'] is None: return zero 41 else: return obj['amount__sum'] 42 43 # Do the real work 44 results = line_items.values(primary_field, secondary_field,).annotate(Sum('amount')) 45 for result in results: 46 print result 47 table[arcprimary[result[primary_field]]][arcsecondary[result[secondary_field]]] = lineitem_total(result) 48 #for num, (pk, label, qobj_lineitem, qobj_primary) in enumerate(secondary_axis): 49 # secondary_results = (primary_axis_objs.filter(main_lineitem_limit_primary, qobj_primary, ).annotate(Sum('lineitem__amount'))) 50 # for cell in secondary_results: 51 # #print cell, cell.pk, arcprimary[cell.pk], num, table[arcprimary[cell.pk]] 52 # table[arcprimary[cell.pk]][num] = lineitem_total(cell) 53 54 return table 55 27 56 def build_table_aggregate(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis): 28 57 # This uses a simpler but probably slower method … … 43 72 44 73 build_table = build_table_annotate 74 build_table = build_table_aggregate 45 75 46 76 47 77 def get_primary_axis(slug, base_area, term, ): 48 if slug in axes and axes[slug][ 2]:49 return (axes[slug][0], ) + axes[slug][1](base_area, term, )78 if slug in axes and axes[slug][3]: 79 return axes[slug][0:2] + axes[slug][2](base_area, term, ) 50 80 else: 51 81 raise NotImplementedError 52 82 53 83 def get_secondary_axis(slug, base_area, term, ): 54 if slug in axes and axes[slug][ 3]:55 return (axes[slug][0], ) + axes[slug][1](base_area, term, )84 if slug in axes and axes[slug][4]: 85 return axes[slug][0:2] + axes[slug][2](base_area, term, ) 56 86 else: 57 87 raise NotImplementedError … … 103 133 104 134 axes = { 105 'budget-areas': ('Budget Areas', get_budget_areas, True, True, ),106 'budget-terms': ('Budget Terms', get_budget_terms, True, True, ),107 'layers': ('Layers', get_layers, False, True, ),135 'budget-areas': ('Budget Areas', 'budget_area', get_budget_areas, True, True, ), 136 'budget-terms': ('Budget Terms', 'budget_term', get_budget_terms, True, True, ), 137 'layers': ('Layers', 'layer', get_layers, False, True, ), 108 138 } 109 139 -
remit/finance_core/reporting_tests.sh
r2542022 r18149fd 1 1 #!/bin/bash 2 2 3 methods="annotate aggregate "3 methods="annotate aggregate valannotate" 4 4 baseurl=${1:-http://localhost:8001/finance_core/reporting/?a=b} 5 5 baseurls="$baseurl&term=2010-spring $baseurl&area=13 $baseurl&layer=30" -
remit/finance_core/views.py
r47bb508 r18149fd 66 66 primary_slug = 'budget-areas' 67 67 try: 68 primary_name, primary_ axis, primary_axis_objs = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, term_obj, )68 primary_name, primary_field, primary_axis, primary_axis_objs = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, term_obj, ) 69 69 except NotImplementedError: 70 70 raise Http404("Primary axis %s is not implemented" % primary_slug) … … 76 76 secondary_slug = 'layers' 77 77 try: 78 secondary_name, secondary_ axis, secondary_axis_obj = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, term_obj, )78 secondary_name, secondary_field, secondary_axis, secondary_axis_obj = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, term_obj, ) 79 79 except NotImplementedError: 80 80 raise Http404("Secondary axis %s is not implemented" % secondary_slug) 81 secondary_axis.append((None, 'Total', Q(), Q()))81 #secondary_axis.append((None, 'Total', Q(), Q())) 82 82 83 83 primary_labels = [ ] … … 94 94 'annotate': finance_core.reporting.build_table_annotate, 95 95 } 96 if compute_method in compute_methods:97 build_table = compute_methods[compute_method]96 if compute_method == 'valannotate': 97 table = finance_core.reporting.build_table_valannotate(line_items, primary_field, secondary_field, primary_axis, secondary_axis, ) 98 98 else: 99 raise Http404("Unknown compute_method selected") 100 table = build_table(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis, ) 99 if compute_method in compute_methods: 100 build_table = compute_methods[compute_method] 101 else: 102 raise Http404("Unknown compute_method selected") 103 table = build_table(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis, ) 101 104 102 105 debug = False
Note: See TracChangeset
for help on using the changeset viewer.