Changeset 1204352
- Timestamp:
- Mar 28, 2010, 2:46:00 AM (15 years ago)
- Branches:
- master, client
- Children:
- 3111c8a
- Parents:
- c1d9650 (diff), ea32cd9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Alex Dehnert <adehnert@…> (03/28/10 02:46:00)
- git-committer:
- Alex Dehnert <adehnert@…> (03/28/10 02:46:00)
- Location:
- remit
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
remit/finance_core/models.py
r0e58ad0 rdd2c3d9 12 12 # Applicable to every term? 13 13 always = models.BooleanField(blank=True, default=False) 14 budget_term = models.ManyToManyField('BudgetTerm', through='BudgetAreaTerm') 14 15 15 16 # Contact / ACL information -
remit/finance_core/urls.py
r92ca60e red4ccc7 4 4 urlpatterns = patterns('', 5 5 (r'^display_accounts', finance_core.views.display_tree), 6 url(r'reporting/', finance_core.views.reporting, name='reporting', ), 6 7 ) -
remit/finance_core/views.py
r92ca60e rea32cd9 1 1 from django.http import HttpResponse 2 import vouchers.models 2 import finance_core.models 3 from django.contrib.auth.decorators import user_passes_test 4 from django.shortcuts import render_to_response, get_object_or_404 5 from django.template import RequestContext 6 from django.http import Http404, HttpResponseRedirect 7 from django.db.models import Q 8 from decimal import Decimal 9 import finance_core.reporting 3 10 4 11 def display_tree(request): 5 root = vouchers.models.BudgetArea.get_by_path(['Accounts'])12 root = finance_core.models.BudgetArea.get_by_path(['Accounts']) 6 13 return HttpResponse(root.dump_to_html()) 14 15 def reporting(request): 16 compute_method = 'default' 17 if 'compute_method' in request.REQUEST: 18 compute_method = request.REQUEST['compute_method'] 19 20 ############################### 21 # Retrieve the various limits # 22 ############################### 23 line_items = finance_core.models.LineItem.objects.all() 24 25 # Term 26 if 'term' in request.REQUEST and not request.REQUEST['term'] == 'all': 27 term_obj = get_object_or_404(finance_core.models.BudgetTerm, slug=request.REQUEST['term']) 28 term_name = term_obj.name 29 line_items = line_items.filter(budget_term=term_obj) 30 else: 31 term_obj = None 32 term_name = 'All' 33 34 # Area 35 if 'area' in request.REQUEST: 36 base_area_obj = get_object_or_404(finance_core.models.BudgetArea, pk=request.REQUEST['area']) 37 else: 38 base_area_obj = finance_core.models.BudgetArea.get_by_path(['Accounts']) 39 all_relevant_areas = base_area_obj.get_descendants() 40 if term_obj: 41 all_relevant_areas = all_relevant_areas.filter(Q(always=True) | Q(budget_term=term_obj)) 42 line_items = line_items.filter(budget_area__in=all_relevant_areas) 43 44 # Layer 45 if 'layer' in request.REQUEST and request.REQUEST['layer'] != 'all': 46 try: 47 layer_id = int(request.REQUEST['layer']) 48 layer = finance_core.models.get_layer_by_num(layer_id) 49 except KeyError: 50 raise Http404("Invalid layer %s request" % request.REQUEST['layer']) 51 line_items = line_items.filter(layer=layer_id) 52 else: 53 layer = 'all' 54 55 ####################### 56 # Initialize the axes # 57 ####################### 58 # Primary 59 if 'primary' in request.REQUEST: 60 primary_slug = request.REQUEST['primary'] 61 else: 62 primary_slug = 'budget-areas' 63 try: 64 primary_name, primary_field, primary_axis = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, term_obj, ) 65 except NotImplementedError: 66 raise Http404("Primary axis %s is not implemented" % primary_slug) 67 68 # Secondary 69 if 'secondary' in request.REQUEST: 70 secondary_slug = request.REQUEST['secondary'] 71 else: 72 secondary_slug = 'layers' 73 try: 74 secondary_name, secondary_field, secondary_axis = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, term_obj, ) 75 except NotImplementedError: 76 raise Http404("Secondary axis %s is not implemented" % secondary_slug) 77 78 primary_labels = [ ] 79 for num, (pk, label, qobj, ) in enumerate(primary_axis): 80 primary_labels.append(label) 81 secondary_labels = [ secondary[1] for secondary in secondary_axis ] 82 83 ###################### 84 # Do the computation # 85 ###################### 86 compute_methods = { 87 'default': finance_core.reporting.build_table, 88 'aggregate': finance_core.reporting.build_table_aggregate, 89 'annotate': finance_core.reporting.build_table_annotate, 90 } 91 if compute_method in compute_methods: 92 build_table = compute_methods[compute_method] 93 else: 94 raise Http404("Unknown compute_method selected") 95 table = build_table(line_items, primary_field, secondary_field, primary_axis, secondary_axis, ) 96 finance_core.reporting.append_totals(table) 97 primary_labels.append("Total") 98 secondary_labels.append("Total") 99 100 debug = True 101 debug = False 102 if debug: 103 from django.db import connection 104 print connection.queries 105 print "Number of queries:\t%d" % (len(connection.queries),) 106 print "Table size:\t%dx%d" % (len(primary_labels), len(secondary_labels), ) 107 108 ########## 109 # Render # 110 ########## 111 term_options = finance_core.models.BudgetTerm.objects.all() 112 area_options = finance_core.models.BudgetArea.objects.filter(always=True) 113 context = { 114 'pagename':'reporting', 115 'term_name': term_name, 116 'term_options': term_options, 117 'area': base_area_obj, 118 'area_options': area_options, 119 'layer': layer, 120 'layer_options': finance_core.models.layers, 121 'axes': finance_core.reporting.axes, 122 'primary_name': primary_name, 123 'secondary_name': secondary_name, 124 'primary_labels': primary_labels, 125 'secondary_labels': secondary_labels, 126 'table': table, 127 'table_with_row_labels': zip(primary_labels, table), 128 } 129 return render_to_response('finance_core/reporting.html', context, context_instance=RequestContext(request), ) -
remit/media/style/style.css
rf114f8b red4ccc7 78 78 background: #F88; 79 79 } 80 81 table.money-table td 82 { 83 text-align: right; 84 } 85 table.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 16 16 <li{% ifequal pagename "list_requests" %} class='selected'{% endifequal %}><a href="{% url list_requests %}">List requests</a></li> 17 17 {% endif %} 18 <li{% ifequal pagename "reporting" %} class='selected'{% endifequal %}><a href="{% url reporting %}">Reporting</a></li> 18 19 </ul> 19 20 <div id='content'> -
remit/util/templatetags/misc.py
rf114f8b rc968555 1 1 from django import template 2 import finance_core.models 2 3 3 4 register = template.Library() … … 22 23 if num == value: return name.lower() 23 24 else: return value 25 26 register.filter('layer_num', finance_core.models.layer_num) 27 register.filter('layer_name', finance_core.models.layer_name) -
remit/vouchers/add_gl_accounts.py
r92ca60e rc1d9650 48 48 else: 49 49 parent = base 50 parent.add_child(name=name, account_number=number )50 parent.add_child(name=name, account_number=number, always=True, ) 51 51 else: 52 52 print "%s (%s) already present" % (name, number,)
Note: See TracChangeset
for help on using the changeset viewer.