diff --git a/conservancy_beancount/reports/accrual.py b/conservancy_beancount/reports/accrual.py index b6b0bfee42170956eadc3093fcf98f2a157f19ed..2dcc9c4fa1929eb17aa35a9f7915133a6f455c33 100644 --- a/conservancy_beancount/reports/accrual.py +++ b/conservancy_beancount/reports/accrual.py @@ -140,6 +140,7 @@ class AccrualAccount(enum.Enum): # See AgingODS.start_spreadsheet(). RECEIVABLE = Account('Assets:Receivable', [365, 120, 90, 60]) PAYABLE = Account('Liabilities:Payable', [365, 90, 60, 30]) + PREPAID = Account('Assets:Prepaid', [365, 120, 90, 60]) @classmethod def account_names(cls) -> Iterator[str]: @@ -175,11 +176,15 @@ class AccrualPostings(core.RelatedPostings): accruals: Dict[Tuple[str, ...], List[data.Posting]] = collections.defaultdict(list) payments: Dict[Tuple[str, ...], Deque[data.Posting]] = collections.defaultdict(Deque) key: Tuple[str, ...] + prepaid_account = AccrualAccount.PREPAID.value.name for post in postings: norm_func = core.normalize_amount_func(post.account) - invoice = str(post.meta.get('invoice', 'BlankInvoice')) + entity = str(post.meta.get('entity', 'BlankEntity')) + if post.account.is_under(prepaid_account): + invoice = entity + else: + invoice = str(post.meta.get('invoice', 'BlankInvoice')) if norm_func(post.units.number) >= 0: - entity = str(post.meta.get('entity', 'BlankEntity')) key = (post.meta.date.isoformat(), entity, invoice, post.account) accruals[key].append(post) else: diff --git a/setup.py b/setup.py index 610a3feabf887a5dfe127c4928e2b154597f455a..fc59804154c142be3905940e47d10a37d7338785 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.12.3', + version='1.12.4', author='Software Freedom Conservancy', author_email='info@sfconservancy.org', license='GNU AGPLv3+', diff --git a/tests/test_reports_accrual.py b/tests/test_reports_accrual.py index 1df5f9036b4faada5089ffaecf86c85f62fd9518..f19cac0bfc15ce45de428a20319aac2b5f292d8d 100644 --- a/tests/test_reports_accrual.py +++ b/tests/test_reports_accrual.py @@ -218,7 +218,7 @@ def check_aging_ods(ods_file, date, recv_rows=AGING_AR, pay_rows=AGING_AP): ods_file.seek(0) ods = odf.opendocument.load(ods_file) sheets = ods.spreadsheet.getElementsByType(odf.table.Table) - assert len(sheets) == 2 + assert len(sheets) >= 2 check_aging_sheet(sheets[0], recv_rows, date) check_aging_sheet(sheets[1], pay_rows, date)