From 43fd2624300e3af1677fe216793be5c1480e5fe6 Mon Sep 17 00:00:00 2001 From: Yingtong Li Date: Fri, 17 Jan 2020 21:30:52 +1100 Subject: [PATCH] Add total profit/loss to budget display --- sstreasury/jinja2/sstreasury/budget_print.html | 4 ++++ sstreasury/jinja2/sstreasury/budget_view.html | 4 ++++ sstreasury/models.py | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/sstreasury/jinja2/sstreasury/budget_print.html b/sstreasury/jinja2/sstreasury/budget_print.html index 07ea047..02856ac 100644 --- a/sstreasury/jinja2/sstreasury/budget_print.html +++ b/sstreasury/jinja2/sstreasury/budget_print.html @@ -113,6 +113,10 @@ {% endif %} + + Total Profit (Loss) + {{ '${:.2f}'.format(revision.get_revenue_total() - revision.get_expense_total()) if revision.get_revenue_total() >= revision.get_expense_total() else '(${:.2f})'.format(revision.get_expense_total() - revision.get_revenue_total()) }} + {% endblock %} diff --git a/sstreasury/jinja2/sstreasury/budget_view.html b/sstreasury/jinja2/sstreasury/budget_view.html index d45dbfe..d5a32ba 100644 --- a/sstreasury/jinja2/sstreasury/budget_view.html +++ b/sstreasury/jinja2/sstreasury/budget_view.html @@ -149,6 +149,10 @@ {% endif %} + + Total Profit (Loss) + {{ '${:.2f}'.format(revision.get_revenue_total() - revision.get_expense_total()) if revision.get_revenue_total() >= revision.get_expense_total() else '(${:.2f})'.format(revision.get_expense_total() - revision.get_revenue_total()) }} + diff --git a/sstreasury/models.py b/sstreasury/models.py index 9c6e4db..2fb6292 100644 --- a/sstreasury/models.py +++ b/sstreasury/models.py @@ -96,6 +96,22 @@ class BudgetRevision(models.Model): self.action = BudgetAction.UPDATE_STATE.value self.save() + def get_revenue_total(self): + total = Decimal(0) + for item in self.revenue: + total += Decimal(item['Unit price']) * item['Units'] + if item['IWT']: + total -= (Decimal(item['Unit price']) - (Decimal(item['Unit price']) - Decimal('0.8')) / Decimal('1.019')) * item['Units'] + return total + + def get_expense_total(self): + total = Decimal(0) + for item in self.expense: + total += Decimal(item['Unit price']) * item['Units'] + if not self.expense_no_emergency_fund: + total *= Decimal('1.05') + return total + # Access control def can_view(self, user):