From 087b3274e7d2c8d11205df9e04af0e5fab91be4c 2021-01-19 19:23:51 From: Brett Smith Date: 2021-01-19 19:23:51 Subject: [PATCH] ledger: Dedicated reporting tab for Expenses:Payroll. To better accommodate the new payroll-type metadata. --- diff --git a/conservancy_beancount/reports/ledger.py b/conservancy_beancount/reports/ledger.py index 02306da856cd88244e1a4225df3b85b2e569eee1..bf2fbf97d3363db937bed0daaa265665561a2119 100644 --- a/conservancy_beancount/reports/ledger.py +++ b/conservancy_beancount/reports/ledger.py @@ -92,6 +92,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]): ] ACCOUNT_COLUMNS: Dict[str, Sequence[str]] = collections.OrderedDict([ ('Income', ['project', 'rt-id', 'receipt', 'income-type', 'memo']), + ('Expenses:Payroll', ['project', 'rt-id', 'payroll-type', 'expense-type', 'receipt', 'approval']), ('Expenses', ['project', 'rt-id', 'receipt', 'approval', 'expense-type']), ('Equity', ['project', 'rt-id']), ('Assets:Receivable', ['project', 'rt-id', 'invoice', 'approval', 'contract', 'purchase-order']), diff --git a/setup.py b/setup.py index f052290b09f072635400865a78849ef35067e5a8..e7bb3fd270fb76338229c03e14c4fba2ae81e6a8 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ from setuptools import setup setup( name='conservancy_beancount', description="Plugin, library, and reports for reading Conservancy's books", - version='1.15.4', + version='1.15.5', author='Software Freedom Conservancy', author_email='info@sfconservancy.org', license='GNU AGPLv3+', diff --git a/tests/books/ledger.beancount b/tests/books/ledger.beancount index 13619b1bf3a33d947cd9396734c5c944401238fc..629035a33a53e9a0fb8a98e4c60bb086e4819c32 100644 --- a/tests/books/ledger.beancount +++ b/tests/books/ledger.beancount @@ -9,6 +9,8 @@ classification: "Accounts receivable" 2018-01-01 open Expenses:Other classification: "Other expenses" +2018-01-01 open Expenses:Payroll + classification: "Payroll expenses" 2018-01-01 open Income:Other classification: "Other income" 2018-01-01 open Liabilities:CreditCard diff --git a/tests/test_reports_ledger.py b/tests/test_reports_ledger.py index 6139a253b4653fd20fb5df2f488601b94be084a0..34b09a378d45c592647b3bedb9bbec95332fc687 100644 --- a/tests/test_reports_ledger.py +++ b/tests/test_reports_ledger.py @@ -34,6 +34,7 @@ _ledger_load = bc_loader.load_file(testutil.test_path('books/ledger.beancount')) DEFAULT_REPORT_SHEETS = [ 'Balance', 'Income', + 'Expenses:Payroll', 'Expenses', 'Equity', 'Assets:Receivable', @@ -42,7 +43,9 @@ DEFAULT_REPORT_SHEETS = [ 'Assets', 'Liabilities', ] -PROJECT_REPORT_SHEETS = DEFAULT_REPORT_SHEETS[:5] + [ +PROJECT_REPORT_SHEETS = [ + *DEFAULT_REPORT_SHEETS[:2], + *DEFAULT_REPORT_SHEETS[3:6], 'Assets:Prepaid', 'Liabilities:UnearnedIncome', 'Liabilities:Payable', @@ -402,6 +405,11 @@ def test_account_names_report(ledger_entries, accounts, report_kwargs): for account in iter_accounts(ledger_entries): if not account.startswith(accounts): ExpectedPostings.check_not_in_report(report.document, account) + # This account is reportable but has no postings + elif account == 'Expenses:Payroll': + ExpectedPostings.check_in_report( + report.document, account, START_DATE, STOP_DATE, txn_filter, + ) elif txn_filter is None: expected[account].check_report(report.document, START_DATE, STOP_DATE) else: