From e05f55659a895221289ef5ebfde8b5e99061338c 2020-08-18 05:28:37 From: Brett Smith Date: 2020-08-18 05:28:37 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. --- diff --git a/conservancy_beancount/reports/balance_sheet.py b/conservancy_beancount/reports/balance_sheet.py index 9982211bc79e92a310736db5dbc3b22625714210..a788268d6d3ece8fb175144a21dd171550f04ea4 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 98e14678949c89138be7f2fff9a55f7a33d0cb67..b4e0a5d9d445e0db70da5a8f70c68559c634a861 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), ])