reconcile: Factor out the output formatting
This commit is contained in:
parent
a4bba120eb
commit
e764f3d0ef
2 changed files with 28 additions and 13 deletions
|
@ -625,6 +625,24 @@ def process_unmatched(statement_trans: List[dict], books_trans: List[dict]) -> L
|
||||||
return matches
|
return matches
|
||||||
|
|
||||||
|
|
||||||
|
def format_output(matches, begin_date, end_date, csv_statement, show_reconciled_matches) -> str:
|
||||||
|
with io.StringIO() as out:
|
||||||
|
match_output = format_matches(matches, csv_statement, show_reconciled_matches)
|
||||||
|
_, total_missing_from_books, total_missing_from_statement = totals(matches)
|
||||||
|
print('-' * 155, file=out)
|
||||||
|
statement_heading = f'Statement transactions {begin_date} to {end_date}'
|
||||||
|
print(f'{statement_heading:<52} {"Books transactions":<58} Notes', file=out)
|
||||||
|
print('-' * 155, file=out)
|
||||||
|
for _, output in sorted(match_output, key=lambda x: x[0]):
|
||||||
|
print(output, file=out)
|
||||||
|
print('-' * 155, file=out)
|
||||||
|
print(f'Sub-total not on statement: {total_missing_from_statement:12,.2f}', file=out)
|
||||||
|
print(f'Sub-total not in books: {total_missing_from_books:12,.2f}', file=out)
|
||||||
|
print(f'Total: {total_missing_from_statement + total_missing_from_books:12,.2f}', file=out)
|
||||||
|
print('-' * 155, file=out)
|
||||||
|
return out.getvalue()
|
||||||
|
|
||||||
|
|
||||||
def main(arglist: Optional[Sequence[str]] = None,
|
def main(arglist: Optional[Sequence[str]] = None,
|
||||||
stdout: TextIO = sys.stdout,
|
stdout: TextIO = sys.stdout,
|
||||||
stderr: TextIO = sys.stderr,
|
stderr: TextIO = sys.stderr,
|
||||||
|
@ -689,19 +707,7 @@ def main(arglist: Optional[Sequence[str]] = None,
|
||||||
matches.extend(unmatched)
|
matches.extend(unmatched)
|
||||||
|
|
||||||
# Print out results of our matching.
|
# Print out results of our matching.
|
||||||
match_output = format_matches(matches, args.csv_statement, args.show_reconciled_matches)
|
print(format_output(matches, begin_date, end_date, args.csv_statement, args.show_reconciled_matches))
|
||||||
_, total_missing_from_books, total_missing_from_statement = totals(matches)
|
|
||||||
print('-' * 155)
|
|
||||||
statement_heading = f'Statement transactions {begin_date} to {end_date}'
|
|
||||||
print(f'{statement_heading:<52} {"Books transactions":<58} Notes')
|
|
||||||
print('-' * 155)
|
|
||||||
for _, output in sorted(match_output, key=lambda x: x[0]):
|
|
||||||
print(output)
|
|
||||||
print('-' * 155)
|
|
||||||
print(f'Sub-total not on statement: {total_missing_from_statement:12,.2f}')
|
|
||||||
print(f'Sub-total not in books: {total_missing_from_books:12,.2f}')
|
|
||||||
print(f'Total: {total_missing_from_statement + total_missing_from_books:12,.2f}')
|
|
||||||
print('-' * 155)
|
|
||||||
|
|
||||||
# Write statement metadata back to the books.
|
# Write statement metadata back to the books.
|
||||||
metadata_to_apply = []
|
metadata_to_apply = []
|
||||||
|
|
|
@ -7,6 +7,7 @@ import textwrap
|
||||||
|
|
||||||
from conservancy_beancount.reconcile.statement_reconciler import (
|
from conservancy_beancount.reconcile.statement_reconciler import (
|
||||||
date_proximity,
|
date_proximity,
|
||||||
|
format_output,
|
||||||
match_statement_and_books,
|
match_statement_and_books,
|
||||||
metadata_for_match,
|
metadata_for_match,
|
||||||
payee_match,
|
payee_match,
|
||||||
|
@ -379,3 +380,11 @@ def test_handles_fr_csv():
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
assert read_fr_csv(io.StringIO(CSV)) == expected
|
assert read_fr_csv(io.StringIO(CSV)) == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_output():
|
||||||
|
statement = [S1]
|
||||||
|
books = [B1]
|
||||||
|
matches, _, _ = match_statement_and_books(statement, books)
|
||||||
|
output = format_output(matches, datetime.date(2022, 1, 1), datetime.date(2022, 2, 1), 'test.csv', True)
|
||||||
|
assert '2022-01-01: 10.00 Patreon / Patreon / 12345 → 2022-01-01: 10.00 Patreon ✓ Matched' in output
|
||||||
|
|
Loading…
Reference in a new issue