Changeset 18149fd for remit


Ignore:
Timestamp:
Mar 27, 2010, 8:26:01 PM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
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)
Message:

Add new valannotate method to replace annotate

Location:
remit/finance_core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • remit/finance_core/reporting.py

    ree37f93 r18149fd  
    2525    return table
    2626
     27def 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
    2756def build_table_aggregate(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis):
    2857    # This uses a simpler but probably slower method
     
    4372
    4473build_table = build_table_annotate
     74build_table = build_table_aggregate
    4575
    4676
    4777def 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, )
    5080    else:
    5181        raise NotImplementedError
    5282
    5383def 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, )
    5686    else:
    5787        raise NotImplementedError
     
    103133
    104134axes = {
    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,  ),
    108138}
    109139
  • remit/finance_core/reporting_tests.sh

    r2542022 r18149fd  
    11#!/bin/bash
    22
    3 methods="annotate aggregate"
     3methods="annotate aggregate valannotate"
    44baseurl=${1:-http://localhost:8001/finance_core/reporting/?a=b}
    55baseurls="$baseurl&term=2010-spring $baseurl&area=13 $baseurl&layer=30"
  • remit/finance_core/views.py

    r47bb508 r18149fd  
    6666        primary_slug = 'budget-areas'
    6767    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, )
    6969    except NotImplementedError:
    7070        raise Http404("Primary axis %s is not implemented" % primary_slug)
     
    7676        secondary_slug = 'layers'
    7777    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, )
    7979    except NotImplementedError:
    8080        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()))
    8282
    8383    primary_labels = [ ]
     
    9494        'annotate':  finance_core.reporting.build_table_annotate,
    9595    }
    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, )
    9898    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, )
    101104
    102105    debug = False
Note: See TracChangeset for help on using the changeset viewer.