accrual: Add Prepaid Expenses to aging report.
This commit is contained in:
parent
56bfbe21c4
commit
db3ba4fd4d
3 changed files with 9 additions and 4 deletions
|
@ -140,6 +140,7 @@ class AccrualAccount(enum.Enum):
|
||||||
# See AgingODS.start_spreadsheet().
|
# See AgingODS.start_spreadsheet().
|
||||||
RECEIVABLE = Account('Assets:Receivable', [365, 120, 90, 60])
|
RECEIVABLE = Account('Assets:Receivable', [365, 120, 90, 60])
|
||||||
PAYABLE = Account('Liabilities:Payable', [365, 90, 60, 30])
|
PAYABLE = Account('Liabilities:Payable', [365, 90, 60, 30])
|
||||||
|
PREPAID = Account('Assets:Prepaid', [365, 120, 90, 60])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def account_names(cls) -> Iterator[str]:
|
def account_names(cls) -> Iterator[str]:
|
||||||
|
@ -175,11 +176,15 @@ class AccrualPostings(core.RelatedPostings):
|
||||||
accruals: Dict[Tuple[str, ...], List[data.Posting]] = collections.defaultdict(list)
|
accruals: Dict[Tuple[str, ...], List[data.Posting]] = collections.defaultdict(list)
|
||||||
payments: Dict[Tuple[str, ...], Deque[data.Posting]] = collections.defaultdict(Deque)
|
payments: Dict[Tuple[str, ...], Deque[data.Posting]] = collections.defaultdict(Deque)
|
||||||
key: Tuple[str, ...]
|
key: Tuple[str, ...]
|
||||||
|
prepaid_account = AccrualAccount.PREPAID.value.name
|
||||||
for post in postings:
|
for post in postings:
|
||||||
norm_func = core.normalize_amount_func(post.account)
|
norm_func = core.normalize_amount_func(post.account)
|
||||||
|
entity = str(post.meta.get('entity', 'BlankEntity'))
|
||||||
|
if post.account.is_under(prepaid_account):
|
||||||
|
invoice = entity
|
||||||
|
else:
|
||||||
invoice = str(post.meta.get('invoice', 'BlankInvoice'))
|
invoice = str(post.meta.get('invoice', 'BlankInvoice'))
|
||||||
if norm_func(post.units.number) >= 0:
|
if norm_func(post.units.number) >= 0:
|
||||||
entity = str(post.meta.get('entity', 'BlankEntity'))
|
|
||||||
key = (post.meta.date.isoformat(), entity, invoice, post.account)
|
key = (post.meta.date.isoformat(), entity, invoice, post.account)
|
||||||
accruals[key].append(post)
|
accruals[key].append(post)
|
||||||
else:
|
else:
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -5,7 +5,7 @@ from setuptools import setup
|
||||||
setup(
|
setup(
|
||||||
name='conservancy_beancount',
|
name='conservancy_beancount',
|
||||||
description="Plugin, library, and reports for reading Conservancy's books",
|
description="Plugin, library, and reports for reading Conservancy's books",
|
||||||
version='1.12.3',
|
version='1.12.4',
|
||||||
author='Software Freedom Conservancy',
|
author='Software Freedom Conservancy',
|
||||||
author_email='info@sfconservancy.org',
|
author_email='info@sfconservancy.org',
|
||||||
license='GNU AGPLv3+',
|
license='GNU AGPLv3+',
|
||||||
|
|
|
@ -218,7 +218,7 @@ def check_aging_ods(ods_file, date, recv_rows=AGING_AR, pay_rows=AGING_AP):
|
||||||
ods_file.seek(0)
|
ods_file.seek(0)
|
||||||
ods = odf.opendocument.load(ods_file)
|
ods = odf.opendocument.load(ods_file)
|
||||||
sheets = ods.spreadsheet.getElementsByType(odf.table.Table)
|
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[0], recv_rows, date)
|
||||||
check_aging_sheet(sheets[1], pay_rows, date)
|
check_aging_sheet(sheets[1], pay_rows, date)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue