Changeset 162f527


Ignore:
Timestamp:
Mar 27, 2010, 3:48:00 AM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, client
Children:
eae6ea8
Parents:
83d9608
git-author:
Alex Dehnert <adehnert@…> (03/27/10 03:48:00)
git-committer:
Alex Dehnert <adehnert@…> (03/27/10 03:48:00)
Message:

Start of giving options for the axis

Location:
remit/finance_core
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • remit/finance_core/reporting.py

    r13e7c01 r162f527  
    11from decimal import Decimal
    2 from django.db.models import Sum
     2from django.db.models import Q, Sum
     3import finance_core.models
    34
    45def build_table_annotate(line_items, main_lineitem_limit_primary, primary_axis, primary_axis_objs, secondary_axis, ):
     
    78    table = []
    89    zero = Decimal('0.00')
    9     for num, (pk, label, qobj, ) in enumerate(primary_axis):
     10    for num, (pk, label, qobj, objrel_qobj) in enumerate(primary_axis):
    1011        arcprimary[pk] = num
    1112        table.append([zero]*len(secondary_axis))
     
    1718    # Do the real work
    1819    print secondary_axis
    19     for num, (label, qobj_lineitem, qobj_primary) in enumerate(secondary_axis):
     20    for num, (pk, label, qobj_lineitem, qobj_primary) in enumerate(secondary_axis):
    2021        print num
    2122        secondary_results = (primary_axis_objs.filter(main_lineitem_limit_primary, qobj_primary, ).annotate(Sum('lineitem__amount')))
     
    3738    table = [ # Primary axis
    3839            [ # Secondary axis
    39                 total_amount(line_items.filter(primary[2], secondary[1]))
     40                total_amount(line_items.filter(primary[2], secondary[2]))
    4041            for secondary in secondary_axis]
    4142        for primary in primary_axis]
    4243
    4344    return table
    44    
    4545
    4646build_table = build_table_annotate
     47
     48
     49def get_primary_axis(slug, base_area):
     50    if slug == 'budget-areas':
     51        return get_budget_areas(base_area)
     52    else:
     53        raise UnsupportedOperationException()
     54
     55def get_secondary_axis(slug, base_area):
     56    if slug == 'budget-areas':
     57        return get_budget_areas(base_area)
     58    elif slug == 'layers':
     59        return get_layers(base_area)
     60    else:
     61        raise NotImplementedError
     62
     63def get_budget_areas(base_area):
     64    name = 'Budget Areas'
     65    base_area_depth = base_area.depth
     66    axis = [
     67        (
     68            area.pk,
     69            area.indented_name(base_area_depth),
     70            Q(budget_area=area),
     71            Q(lineitem__budget_area=area),
     72        )
     73        for area in base_area.get_descendants()
     74    ]
     75    axis_objs = base_area.get_descendants()
     76    return name, axis, axis_objs,
     77
     78def get_layers(base_area):
     79    name = 'Layers'
     80    axis = [
     81        (
     82            finance_core.models.layer_num(layer),
     83            finance_core.models.layer_name(layer),
     84            Q(layer=finance_core.models.layer_num(layer)),
     85            Q(lineitem__layer=finance_core.models.layer_num(layer)),
     86        )
     87        for layer in finance_core.models.layers
     88    ]
     89    return name, axis, None,
     90
  • remit/finance_core/views.py

    r13e7c01 r162f527  
    3232        base_area_obj = finance_core.models.BudgetArea.get_by_path(['Accounts'])
    3333    line_items = line_items.filter(budget_area__in=base_area_obj.get_descendants())
    34     base_area_depth = base_area_obj.depth
    35     #print base_area_obj
    3634
    3735    # Initialize the axis
    38     primary_name = 'Budget Areas'
    39     primary_axis = [
    40         (area.pk, area.indented_name(base_area_depth), Q(budget_area=area), ) for area in base_area_obj.get_descendants()
    41     ]
    42     primary_axis_objs = base_area_obj.get_descendants()
    43     secondary_name = 'Layers'
    44     secondary_axis = [
    45         (
    46             finance_core.models.layer_name(layer),
    47             Q(layer=finance_core.models.layer_num(layer)),
    48             Q(lineitem__layer=finance_core.models.layer_num(layer)),
    49         )
    50         for layer in finance_core.models.layers
    51     ]
    52     secondary_axis.append(('Total', Q(), Q()))
     36    # Primary
     37    if 'primary' in request.REQUEST:
     38        primary_slug = request.REQUEST['primary']
     39    else:
     40        primary_slug = 'budget-areas'
     41    try:
     42        primary_name, primary_axis, primary_axis_objs = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, )
     43    except NotImplementedError:
     44        raise Http404("Primary axis %s is not implemented" % primary_slug)
     45
     46    # Secondary
     47    if 'secondary' in request.REQUEST:
     48        secondary_slug = request.REQUEST['secondary']
     49    else:
     50        secondary_slug = 'layers'
     51    try:
     52        secondary_name, secondary_axis, secondary_axis_obj = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, )
     53    except NotImplementedError:
     54        raise Http404("Secondary axis %s is not implemented" % secondary_slug)
     55    secondary_axis.append((None, 'Total', Q(), Q()))
    5356
    5457    primary_labels = [ ]
    55     for num, (pk, label, qobj, ) in enumerate(primary_axis):
     58    for num, (pk, label, qobj, objrel_qobj, ) in enumerate(primary_axis):
    5659        primary_labels.append(label)
    57     secondary_labels = [ secondary[0] for secondary in secondary_axis ]
     60    secondary_labels = [ secondary[1] for secondary in secondary_axis ]
    5861
    5962    # Do the computation
Note: See TracChangeset for help on using the changeset viewer.