From 69d644296676ded0d6b078f953f8046c93350d6b Mon Sep 17 00:00:00 2001 From: Benjamin Loison Date: Thu, 3 Oct 2024 23:47:26 +0200 Subject: [PATCH] WIP about to plot with transaction precision --- bnp_pdf_statement_parser.py | 35 +++++++++++++++++++---------------- utils.py | 1 + 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/bnp_pdf_statement_parser.py b/bnp_pdf_statement_parser.py index b7da3fc..fb11ef6 100755 --- a/bnp_pdf_statement_parser.py +++ b/bnp_pdf_statement_parser.py @@ -5,6 +5,7 @@ import matplotlib.pyplot as plt import matplotlib.ticker as ticker from datetime import datetime from utils import getDatetimeFromFileName, getMonthIndexSinceEpoch, getMonthNameFromMonthIndex, readPdfBankStatement +import operator PATH = f'/home/benjamin/Desktop/bens_folder/bazaar/documents/bnp/bank_statements/' @@ -16,30 +17,24 @@ MAIN_BANK_ACCOUNT = 'compte_de_cheques' debits = [] credits_ = [] -# Precise bank account allTransactions = [] - -''' -def appendTransactions(x): - global allTransactions - allTransactions += [x] -''' +monthlyTransactions = {} def appendTransactions(transactions, bankAccount): global allTransactions - #print('Before') - #pprint(allTransactions) for transaction in transactions: transaction['bank account'] = bankAccount allTransactions += [transaction] - #print('After') - #pprint(allTransactions) + date = transaction['date'].replace(day = 1) + monthlyTransactions[date] = monthlyTransactions.get(date, []) + [transaction] for folder in os.listdir(): if folder != MAIN_BANK_ACCOUNT: for file in os.listdir(folder): filePath = f'{folder}/{file}' print(filePath) + print(readPdfBankStatement(filePath)) + exit(0) transactions = readPdfBankStatement(filePath)[3] appendTransactions(transactions, folder) @@ -59,13 +54,21 @@ for folder in sorted(os.listdir()): #break from pprint import pprint -#pprint(transactions) -import operator allTransactions.sort(key = operator.itemgetter('date')) print(len(allTransactions)) pprint(allTransactions) -exit(0) +sortedMonths = sorted(monthlyTransactions.keys()) +#pprint(sortedMonths) +# debit or credit? +totalMonthlyCredits = [] +totalMonthlyDebits = [] +totalMonthlyDifferences = [] +#totalMonthlyDebits = [[ for transaction in monthlyTransactions[month]] for month in sortedMonths] +for month in sortedMonths: + #for transaction in monthlyTransactions[month]: + currentMonthlyTransactions = monthlyTransactions[month] + monthlyCredits = [] fig, ax = plt.subplots() plt.title('Monthly debits and credits') @@ -73,12 +76,12 @@ plt.xlabel('Date') plt.ylabel('€') ALPHA = 0.5 -xTicks = range(getMonthIndexSinceEpoch(firstDatetime), getMonthIndexSinceEpoch(lastDatetime) + 1) +xTicks = range(getMonthIndexSinceEpoch(sortedMonths[0]), getMonthIndexSinceEpoch(sortedMonths[-1]) + 1) totalMonthlyAmountAndLabel = ( #(totalMonthlyDebits, 'Debit'), #(totalMonthlyCredits, 'Credit'), (totalMonthlyDifferences, 'Difference'), - (totals, 'Total'), + #(totals, 'Total'), ) for totalMonthlyAmount, totalMonthlyLabel in totalMonthlyAmountAndLabel: plt.bar(xTicks, totalMonthlyAmount, alpha = ALPHA, label = totalMonthlyLabel) diff --git a/utils.py b/utils.py index 7011c67..c8adc21 100644 --- a/utils.py +++ b/utils.py @@ -78,6 +78,7 @@ def readPdfBankStatement(filePath): break firstLineOfPaymentRegexMatch = FIRST_LINE_OF_PAYMENT_REGEX.match(line) if firstLineOfPaymentRegexMatch is not None: + print(line) if date is not None: transactions += [{ 'date': getDateFollowing(date, initialDate),