reconcile: Add statement total and cleared total.
This commit is contained in:
parent
042633d82d
commit
5d45171ed7
1 changed files with 17 additions and 0 deletions
|
@ -27,6 +27,7 @@ Problems in scope:
|
||||||
- transactions are entered manually and reconciled after the fact, but importing from statements may be useful in some cases
|
- transactions are entered manually and reconciled after the fact, but importing from statements may be useful in some cases
|
||||||
|
|
||||||
Q. How are reconciliation reports created currently? How do you read them?
|
Q. How are reconciliation reports created currently? How do you read them?
|
||||||
|
- by hand from copying and pasting from the helper tool output
|
||||||
|
|
||||||
TODO/ISSUES:
|
TODO/ISSUES:
|
||||||
- AMEX statement doesn't provide bank balance or running total
|
- AMEX statement doesn't provide bank balance or running total
|
||||||
|
@ -110,8 +111,11 @@ parser.add_argument('--account', required=True, help='eg. Liabilities:CreditCard
|
||||||
parser.add_argument('--grep-output-filename')
|
parser.add_argument('--grep-output-filename')
|
||||||
# parser.add_argument('--report-group-regex')
|
# parser.add_argument('--report-group-regex')
|
||||||
parser.add_argument('--show-reconciled-matches', action='store_true')
|
parser.add_argument('--show-reconciled-matches', action='store_true')
|
||||||
|
parser.add_argument('--statement-total', required=True)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
statement_total = decimal.Decimal(args.statement_total)
|
||||||
|
|
||||||
# TODO: Should put in a sanity check to make sure the statement you're feeding
|
# TODO: Should put in a sanity check to make sure the statement you're feeding
|
||||||
# in matches the account you've provided.
|
# in matches the account you've provided.
|
||||||
if 'AMEX' in args.account:
|
if 'AMEX' in args.account:
|
||||||
|
@ -135,6 +139,16 @@ end_date = statement_trans[-1]['date']
|
||||||
# but I'm not clear on how to use compile(). An example would help.
|
# but I'm not clear on how to use compile(). An example would help.
|
||||||
entries, _, options = loader.load_file(args.beancount_file)
|
entries, _, options = loader.load_file(args.beancount_file)
|
||||||
|
|
||||||
|
total_query = f"""SELECT sum(COST(position)) AS aa WHERE account = "{args.account}"
|
||||||
|
AND date <= {end_date.isoformat()} AND META('bank-statement') != NULL"""
|
||||||
|
result_types, result_rows = run_query(
|
||||||
|
entries,
|
||||||
|
options,
|
||||||
|
total_query,
|
||||||
|
numberify=True,
|
||||||
|
)
|
||||||
|
cleared_total = result_rows[0][0]
|
||||||
|
|
||||||
# String concatenation looks bad, but there's no SQL injection possible here
|
# String concatenation looks bad, but there's no SQL injection possible here
|
||||||
# because BQL can't write back to the Beancount files. I hope!
|
# because BQL can't write back to the Beancount files. I hope!
|
||||||
query = f"SELECT filename, META('lineno') AS posting_line, META('bank-statement') AS posting_statement, date, number(cost(position)), payee, narration where account = '{args.account}' and date >= {begin_date} and date <= {end_date}"
|
query = f"SELECT filename, META('lineno') AS posting_line, META('bank-statement') AS posting_statement, date, number(cost(position)), payee, narration where account = '{args.account}' and date >= {begin_date} and date <= {end_date}"
|
||||||
|
@ -183,6 +197,9 @@ print('-' * 155)
|
||||||
for _, output in sorted(matches):
|
for _, output in sorted(matches):
|
||||||
print(output)
|
print(output)
|
||||||
print('-' * 155)
|
print('-' * 155)
|
||||||
|
print(f'STATEMENT TOTAL: {statement_total}')
|
||||||
|
print(f'CLEARED TOTAL: {cleared_total:12,.2f}')
|
||||||
|
print('-' * 155)
|
||||||
|
|
||||||
# Write statement metadata back to books
|
# Write statement metadata back to books
|
||||||
if metadata_to_apply:
|
if metadata_to_apply:
|
||||||
|
|
Loading…
Reference in a new issue