Changeset ed4ccc7 for remit


Ignore:
Timestamp:
Mar 24, 2010, 5:13:25 AM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, client
Children:
3f1e074
Parents:
86817cf
git-author:
Alex Dehnert <adehnert@…> (03/24/10 05:13:25)
git-committer:
Alex Dehnert <adehnert@…> (03/24/10 05:13:25)
Message:

Add basic reporting (Trac #3)

Location:
remit
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • remit/finance_core/urls.py

    r92ca60e red4ccc7  
    44urlpatterns = patterns('',
    55    (r'^display_accounts', finance_core.views.display_tree),
     6    url(r'reporting/', finance_core.views.reporting, name='reporting', ),
    67)
  • remit/finance_core/views.py

    r86817cf red4ccc7  
    11from django.http import HttpResponse
    22import finance_core.models
     3from django.contrib.auth.decorators import user_passes_test
     4from django.shortcuts import render_to_response, get_object_or_404
     5from django.template import RequestContext
     6from django.http import Http404, HttpResponseRedirect
     7from django.db.models import Q, Sum
     8from decimal import Decimal
    39
    410def display_tree(request):
    511    root = finance_core.models.BudgetArea.get_by_path(['Accounts'])
    612    return HttpResponse(root.dump_to_html())
     13
     14def reporting(request):
     15    line_items = finance_core.models.LineItem.objects.all()
     16    term_name = 'All'
     17    if 'term' in request.REQUEST:
     18        term_obj = get_object_or_404(finance_core.models.BudgetTerm, slug=request.REQUEST['term'])
     19        term_name = term_obj.name
     20        line_items = line_items.filter(budget_term=term_obj)
     21    if 'area' in request.REQUEST:
     22        base_area_obj = get_object_or_404(finance_core.models.BudgetArea, pk=request.REQUEST['area'])
     23    else:
     24        base_area_obj = finance_core.models.BudgetArea.get_by_path(['Accounts'])
     25    line_items = line_items.filter(budget_area__in=base_area_obj.get_descendants())
     26    base_area_depth = base_area_obj.depth
     27    print base_area_obj
     28
     29    primary_name = 'Budget Areas'
     30    primary_axis = [
     31        (area.indented_name(base_area_depth), Q(budget_area=area), ) for area in base_area_obj.get_descendants()
     32    ]
     33    secondary_name = 'Layers'
     34    secondary_axis = [ (finance_core.models.layer_name(layer), Q(layer=finance_core.models.layer_num(layer)), ) for layer in finance_core.models.layers ]
     35
     36    primary_axis.append(('Total', Q(), ))
     37    secondary_axis.append(('Total', Q(), ))
     38
     39    primary_labels = [ primary[0] for primary in primary_axis ]
     40    secondary_labels = [ secondary[0] for secondary in secondary_axis ]
     41
     42    zero = Decimal('0.00')
     43    def total_amount(queryset):
     44        amount = queryset.aggregate(Sum('amount'))['amount__sum']
     45        if amount is None: return zero
     46        else: return amount
     47    table = [ # Primary axis
     48            [ # Secondary axis
     49                total_amount(line_items.filter(primary[1], secondary[1]))
     50            for secondary in secondary_axis]
     51        for primary in primary_axis]
     52
     53    debug = False
     54    if debug:
     55        from django.db import connection
     56        print connection.queries
     57        print "Number of queries:\t%d" % (len(connection.queries),)
     58        print "Table size:\t%dx%d" % (len(primary_labels), len(secondary_labels), )
     59
     60    context = {
     61        'pagename':'reporting',
     62        'term_name': term_name,
     63        'area': base_area_obj,
     64        'primary_name': primary_name,
     65        'secondary_name': secondary_name,
     66        'primary_labels': primary_labels,
     67        'secondary_labels': secondary_labels,
     68        'table': table,
     69        'table_with_row_labels': zip(primary_labels, table),
     70    }
     71    return render_to_response('finance_core/reporting.html', context, context_instance=RequestContext(request), )
  • remit/media/style/style.css

    rf114f8b red4ccc7  
    7878    background: #F88;
    7979}
     80
     81table.money-table td
     82{
     83    text-align: right;
     84}
     85table.money-table th
     86{
     87    white-space: pre-wrap;
     88    text-align: left;
     89    font-weight: normal;
     90}
  • remit/remit_templates/base.html

    r3a0c51b red4ccc7  
    1616        <li{% ifequal pagename "list_requests" %} class='selected'{% endifequal %}><a href="{% url list_requests %}">List requests</a></li>
    1717        {% endif %}
     18        <li{% ifequal pagename "reporting" %} class='selected'{% endifequal %}><a href="{% url reporting %}">Reporting</a></li>
    1819    </ul>
    1920    <div id='content'>
Note: See TracChangeset for help on using the changeset viewer.