accrual: Only try to generate an outgoing report for accruals with rt-id.
This commit is contained in:
parent
1124842ea7
commit
3330c834b2
4 changed files with 30 additions and 10 deletions
|
@ -701,8 +701,10 @@ def main(arglist: Optional[Sequence[str]]=None,
|
||||||
groups = dict(AccrualPostings.group_by_first_meta_link(postings, 'rt-id'))
|
groups = dict(AccrualPostings.group_by_first_meta_link(postings, 'rt-id'))
|
||||||
if (args.report_type is None
|
if (args.report_type is None
|
||||||
and len(groups) == 1
|
and len(groups) == 1
|
||||||
and all(g.accrual_type is AccrualAccount.PAYABLE and not g.is_paid()
|
and all(group.accrual_type is AccrualAccount.PAYABLE
|
||||||
for g in groups.values())
|
and not group.is_paid()
|
||||||
|
and key # Make sure we have a usable rt-id
|
||||||
|
for key, group in groups.items())
|
||||||
):
|
):
|
||||||
args.report_type = ReportType.OUTGOING
|
args.report_type = ReportType.OUTGOING
|
||||||
if args.report_type is not ReportType.OUTGOING:
|
if args.report_type is not ReportType.OUTGOING:
|
||||||
|
|
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.1.10',
|
version='1.1.11',
|
||||||
author='Software Freedom Conservancy',
|
author='Software Freedom Conservancy',
|
||||||
author_email='info@sfconservancy.org',
|
author_email='info@sfconservancy.org',
|
||||||
license='GNU AGPLv3+',
|
license='GNU AGPLv3+',
|
||||||
|
|
|
@ -143,6 +143,13 @@
|
||||||
Expenses:FilingFees 60.00 USD
|
Expenses:FilingFees 60.00 USD
|
||||||
Liabilities:Payable:Accounts -60.00 USD
|
Liabilities:Payable:Accounts -60.00 USD
|
||||||
|
|
||||||
|
2010-06-15 * "GrantCo" "2010Q2 grant"
|
||||||
|
rt-id: "rt:470"
|
||||||
|
invoice: "rt:470/4700"
|
||||||
|
project: "Development Grant"
|
||||||
|
Assets:Receivable:Accounts 5500 USD
|
||||||
|
Income:Donations -5500 USD
|
||||||
|
|
||||||
2010-06-18 * "EuroGov" "European legal fees"
|
2010-06-18 * "EuroGov" "European legal fees"
|
||||||
; Multiple rt-ids are used to test proper handling for both
|
; Multiple rt-ids are used to test proper handling for both
|
||||||
; searching and generating the outgoing report.
|
; searching and generating the outgoing report.
|
||||||
|
@ -153,12 +160,12 @@
|
||||||
Liabilities:Payable:Accounts -1,000 EUR {1.100 USD}
|
Liabilities:Payable:Accounts -1,000 EUR {1.100 USD}
|
||||||
Expenses:FilingFees 1,000 EUR {1.100 USD}
|
Expenses:FilingFees 1,000 EUR {1.100 USD}
|
||||||
|
|
||||||
2010-06-15 * "GrantCo" "2010Q2 grant"
|
2010-06-20 * "StateGov" "Business registration"
|
||||||
rt-id: "rt:470"
|
; Intentionally has no rt-id
|
||||||
invoice: "rt:470/4700"
|
invoice: "Invoices/2010StateRegistration.pdf"
|
||||||
project: "Development Grant"
|
project: "Conservancy"
|
||||||
Assets:Receivable:Accounts 5500 USD
|
Liabilities:Payable:Accounts -50 USD
|
||||||
Income:Donations -5500 USD
|
Expenses:FilingFees 50 USD
|
||||||
|
|
||||||
2010-09-15 * "GrantCo" "2010Q3 grant"
|
2010-09-15 * "GrantCo" "2010Q3 grant"
|
||||||
rt-id: "rt:470"
|
rt-id: "rt:470"
|
||||||
|
|
|
@ -79,7 +79,7 @@ class AgingRow(NamedTuple):
|
||||||
date = datetime.datetime.strptime(date, '%Y-%m-%d').date()
|
date = datetime.datetime.strptime(date, '%Y-%m-%d').date()
|
||||||
if not isinstance(at_cost, tuple):
|
if not isinstance(at_cost, tuple):
|
||||||
at_cost = testutil.Amount(at_cost)
|
at_cost = testutil.Amount(at_cost)
|
||||||
if rt_id is None:
|
if rt_id is None and invoice.startswith('rt:'):
|
||||||
rt_id, _, _ = invoice.partition('/')
|
rt_id, _, _ = invoice.partition('/')
|
||||||
return cls(date, [entity], orig_amount, at_cost, [rt_id], [invoice], [project])
|
return cls(date, [entity], orig_amount, at_cost, [rt_id], [invoice], [project])
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ AGING_AP = [
|
||||||
AgingRow.make_simple('2010-06-10', 'Lawyer', 280, 'rt:510/6100'),
|
AgingRow.make_simple('2010-06-10', 'Lawyer', 280, 'rt:510/6100'),
|
||||||
AgingRow.make_simple('2010-06-18', 'EuroGov', 1100, 'rt:520/5200',
|
AgingRow.make_simple('2010-06-18', 'EuroGov', 1100, 'rt:520/5200',
|
||||||
orig_amount=[testutil.Amount(1000, 'EUR')]),
|
orig_amount=[testutil.Amount(1000, 'EUR')]),
|
||||||
|
AgingRow.make_simple('2010-06-20', 'StateGov', 50, 'Invoices/2010StateRegistration.pdf'),
|
||||||
]
|
]
|
||||||
|
|
||||||
AGING_AR = [
|
AGING_AR = [
|
||||||
|
@ -654,6 +655,16 @@ def test_main_balance_report(arglist):
|
||||||
r'^\s+1,500\.00 USD outstanding since 2010-05-15$',
|
r'^\s+1,500\.00 USD outstanding since 2010-05-15$',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def test_main_balance_report_because_no_rt_id():
|
||||||
|
invoice = 'Invoices/2010StateRegistration.pdf'
|
||||||
|
retcode, output, errors = run_main([invoice])
|
||||||
|
assert not errors.getvalue()
|
||||||
|
assert retcode == 0
|
||||||
|
check_output(output, [
|
||||||
|
rf'\b{re.escape(invoice)}:$',
|
||||||
|
r'^\s+-50\.00 USD outstanding since 2010-06-20$',
|
||||||
|
])
|
||||||
|
|
||||||
@pytest.mark.parametrize('arglist', [
|
@pytest.mark.parametrize('arglist', [
|
||||||
[],
|
[],
|
||||||
['-t', 'aging', 'entity=Lawyer'],
|
['-t', 'aging', 'entity=Lawyer'],
|
||||||
|
|
Loading…
Add table
Reference in a new issue