From e05f55659a895221289ef5ebfde8b5e99061338c Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Tue, 18 Aug 2020 01:06:23 -0400 Subject: [PATCH] balance_sheet: Balance only considers post_type for Expenses. This simplifies the code and slightly optimizes it, since now Balance won't store and keep re-summing income-type breakdowns that nothing needs. --- conservancy_beancount/reports/balance_sheet.py | 11 +++-------- tests/test_reports_balance_sheet.py | 4 +--- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/conservancy_beancount/reports/balance_sheet.py b/conservancy_beancount/reports/balance_sheet.py index 9982211..a788268 100644 --- a/conservancy_beancount/reports/balance_sheet.py +++ b/conservancy_beancount/reports/balance_sheet.py @@ -78,11 +78,6 @@ class BalanceKey(NamedTuple): class Balances: - POST_TYPES = { - 'Income': 'income-type', - 'Expenses': 'expense-type', - } - def __init__(self, postings: Iterable[data.Posting], start_date: datetime.date, @@ -124,9 +119,9 @@ class Balances: raise TypeError() except (KeyError, TypeError): classification = account - try: - post_type = post.meta[self.POST_TYPES[account.root_part()]] - except KeyError: + if account.root_part() == 'Expenses': + post_type = post.meta.get('expense-type') + else: post_type = None key = BalanceKey(account, classification, period, fund, post_type) self.balances[key] += post.at_cost() diff --git a/tests/test_reports_balance_sheet.py b/tests/test_reports_balance_sheet.py index 98e1467..b4e0a5d 100644 --- a/tests/test_reports_balance_sheet.py +++ b/tests/test_reports_balance_sheet.py @@ -87,13 +87,11 @@ def income_expense_balances(): ({'period': Period.PERIOD, 'account': 'Expenses'}, 26), ({'fund': Fund.RESTRICTED, 'account': 'Income'}, -10), ({'fund': Fund.UNRESTRICTED, 'account': 'Expenses'}, 25), - ({'post_type': 'Donations'}, -10), ({'post_type': 'fundraising'}, 20), ({'post_type': 'management'}, 10), ({'post_type': 'Nonexistent'}, None), - ({'period': Period.PRIOR, 'post_type': 'RBI'}, '-4.80'), + ({'period': Period.PRIOR, 'post_type': 'fundraising'}, '9.60'), ({'fund': Fund.RESTRICTED, 'post_type': 'program'}, 10), - ({'period': Period.PERIOD, 'fund': Fund.UNRESTRICTED, 'post_type': 'RBI'}, '-2.60'), ({'period': Period.PRIOR, 'fund': Fund.RESTRICTED, 'post_type': 'program'}, '4.80'), ({'period': Period.PERIOD, 'fund': Fund.RESTRICTED, 'post_type': 'ΓΈ'}, None), ])