Changeset 13e7c01
- Timestamp:
- Mar 27, 2010, 1:57:39 AM (15 years ago)
- Branches:
- master, client
- Children:
- 83d9608
- Parents:
- 3f1e074
- git-author:
- Alex Dehnert <adehnert@…> (03/27/10 01:57:39)
- git-committer:
- Alex Dehnert <adehnert@…> (03/27/10 01:57:39)
- Location:
- remit/finance_core
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
remit/finance_core/views.py
r3f1e074 r13e7c01 5 5 from django.template import RequestContext 6 6 from django.http import Http404, HttpResponseRedirect 7 from django.db.models import Q , Sum7 from django.db.models import Q 8 8 from decimal import Decimal 9 import finance_core.reporting 9 10 10 11 def display_tree(request): … … 15 16 line_items = finance_core.models.LineItem.objects.all() 16 17 term_name = 'All' 17 term_primary_Q = Q() 18 compute_method = 'default' 19 20 # Main limit to lineitems, relative to primary axis 21 main_lineitem_limit_primary = Q() 22 if 'compute_method' in request.REQUEST: 23 compute_method = request.REQUEST['compute_method'] 18 24 if 'term' in request.REQUEST: 19 25 term_obj = get_object_or_404(finance_core.models.BudgetTerm, slug=request.REQUEST['term']) 20 26 term_name = term_obj.name 21 27 line_items = line_items.filter(budget_term=term_obj) 22 term_primary_Q= Q(lineitem__budget_term=term_obj)28 main_lineitem_limit_primary = Q(lineitem__budget_term=term_obj) 23 29 if 'area' in request.REQUEST: 24 30 base_area_obj = get_object_or_404(finance_core.models.BudgetArea, pk=request.REQUEST['area']) … … 27 33 line_items = line_items.filter(budget_area__in=base_area_obj.get_descendants()) 28 34 base_area_depth = base_area_obj.depth 29 print base_area_obj35 #print base_area_obj 30 36 37 # Initialize the axis 31 38 primary_name = 'Budget Areas' 32 39 primary_axis = [ … … 43 50 for layer in finance_core.models.layers 44 51 ] 45 46 52 secondary_axis.append(('Total', Q(), Q())) 47 53 48 54 primary_labels = [ ] 49 arcprimary = {}50 table = []51 zero = Decimal('0.00')52 55 for num, (pk, label, qobj, ) in enumerate(primary_axis): 53 56 primary_labels.append(label) 54 arcprimary[pk] = num55 table.append([zero]*len(secondary_axis))56 print arcprimary57 58 57 secondary_labels = [ secondary[0] for secondary in secondary_axis ] 59 58 60 def lineitem_total(obj): 61 if obj.lineitem__amount__sum is None: return zero 62 else: return obj.lineitem__amount__sum 63 for num, (label, qobj_lineitem, qobj_primary) in enumerate(secondary_axis): 64 secondary_results = (primary_axis_objs.filter(qobj_primary, term_primary_Q).annotate(Sum('lineitem__amount'))) 65 for cell in secondary_results: 66 print cell, cell.pk, arcprimary[cell.pk], num, table[arcprimary[cell.pk]] 67 table[arcprimary[cell.pk]][num] = lineitem_total(cell) 68 69 slow = False 70 if slow: 71 # This uses a simpler but probably slower method 72 # In theory, if we grow unit tests, comparing this method with 73 # the one above using annotate would be a good idea 74 def total_amount(queryset): 75 amount = queryset.aggregate(Sum('amount'))['amount__sum'] 76 if amount is None: return zero 77 else: return amount 78 table = [ # Primary axis 79 [ # Secondary axis 80 total_amount(line_items.filter(primary[1], secondary[1])) 81 for secondary in secondary_axis] 82 for primary in primary_axis] 59 # Do the computation 60 compute_methods = { 61 'default': finance_core.reporting.build_table, 62 'aggregate': finance_core.reporting.build_table_aggregate, 63 'annotate': finance_core.reporting.build_table_annotate, 64 } 65 if compute_method in compute_methods: 66 build_table = compute_methods[compute_method] 67 else: 68 raise Http404("Unknown compute_method selected") 69 table = build_table(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis, ) 83 70 84 71 debug = False
Note: See TracChangeset
for help on using the changeset viewer.