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):