diff --git a/sstreasury/jinja2/sstreasury/budget_list.html b/sstreasury/jinja2/sstreasury/budget_list.html index b967589..ba1f43b 100644 --- a/sstreasury/jinja2/sstreasury/budget_list.html +++ b/sstreasury/jinja2/sstreasury/budget_list.html @@ -111,6 +111,11 @@ {% endif %} + + {% if yearly_totals %} +

Yearly totals

+ + {% endif %} {% endblock %} {% block head %} @@ -123,4 +128,41 @@ + + {% if yearly_totals %} + + + {% endif %} {% endblock %} diff --git a/sstreasury/views.py b/sstreasury/views.py index cc5531c..8ed1345 100644 --- a/sstreasury/views.py +++ b/sstreasury/views.py @@ -36,6 +36,7 @@ from ssmain.email import Emailer import csv from datetime import datetime +from decimal import Decimal import functools import io import itertools @@ -266,13 +267,30 @@ def budget_list(request): if group is not None: group.append(revision) + # Get yearly totals + if request.GET.get('cost_centre', 'all') != 'all': + yearly_totals = [[y, float(t)] for y, t in get_yearly_totals(budgets_filtered)] + else: + yearly_totals = None + return render(request, 'sstreasury/budget_list.html', { 'budgets_action': budgets_action, 'budgets_open': budgets_open, 'budgets_closed': budgets_closed, + 'yearly_totals': yearly_totals, 'page': page }) +def get_yearly_totals(budgets_filtered): + """Get total net profit per calendar year""" + + results = [] + + for year, g in itertools.groupby(sorted(budgets_filtered, key=lambda r: r.time.year), key=lambda r: r.time.year): + results.append((year, sum((r.get_revenue_total() - r.get_expense_total() for r in g), Decimal('0')))) + + return results + @login_required @uses_budget def budget_view(request, budget, revision):