This commit is contained in:
Jake
2025-04-08 19:43:50 +01:00
parent c9c287aa8a
commit c0b5e95d98
2 changed files with 30 additions and 33 deletions
+12 -16
View File
@@ -22,27 +22,17 @@ try:
master_transactions = transactions.join(categories, left_on='category_id', right_on='category_id', suffix='_category')\ master_transactions = transactions.join(categories, left_on='category_id', right_on='category_id', suffix='_category')\
.join(accounts, left_on='account_id', right_on='account_id', suffix='_account')\ .join(accounts, left_on='account_id', right_on='account_id', suffix='_account')\
.join(payees, left_on='payee_id', right_on='payee_id', suffix='_payee')\ .join(payees, left_on='payee_id', right_on='payee_id', suffix='_payee')\
.join(dates, left_on='transaction_date', right_on='date_id', suffix='_date')\ .join(dates, left_on='transaction_date', right_on='date_id', suffix='_date')
# date filter for callback date range
#.filter(pl.col('transaction_date'))
except Exception as e: except Exception as e:
logging.error(f'Error joining DataFrames: {e}') logging.error(f'Error joining DataFrames: {e}')
sys.exit(ec.BAD_JOIN) sys.exit(ec.BAD_JOIN)
def update_dates(start_date, end_date): def update_dates(start_date, end_date):
start_year = int(start_date[:4])
start_month = int(start_date[5:7])
start_day = int(start_date[8:10])
end_year = int(end_date[:4])
end_month = int(end_date[5:7])
end_day = int(end_date[8:10])
master_data = master_transactions.filter( master_data = master_transactions.filter(
(pl.col('year_date') >= start_year ) & (pl.col('year_date') <= end_year) & (pl.col('year') >= start_date.year ) & (pl.col('year') <= end_date.year) &
(pl.col('month_date') >= start_month ) & (pl.col('month_date') <= end_month) & (pl.col('month') >= start_date.month ) & (pl.col('month') <= end_date.month) &
(pl.col('day_date') >= start_day ) & (pl.col('day_date') <= end_day) (pl.col('day') >= start_date.day ) & (pl.col('day') <= end_date.day)
) )
return master_data return master_data
@@ -124,4 +114,10 @@ def update_data(master_data):
paper_bgcolor='black', paper_bgcolor='black',
font_color='white' font_color='white'
) )
return spend_per_day_line, spend_per_category_bar, spend_per_payee_bar, total_spend
data = {"spend_per_day_line": spend_per_day_line,
"spend_per_category_bar": spend_per_category_bar,
"spend_per_payee_bar": spend_per_payee_bar,
"total_spend": total_spend}
print(data)
return data
+18 -17
View File
@@ -1,26 +1,27 @@
'''Module to create a Dash app that displays visualizations of YNAB data.''' '''Module to create a Dash app that displays visualizations of YNAB data.'''
import dash import dash
import dash_bootstrap_components as dbc from dash import dcc, html
from dash.dependencies import Input, Output from dash.dependencies import Input, Output
import dash_bootstrap_components as dbc
from visuals.layout import create_layout
from visuals.components import update_data, update_dates
from datetime import date
import visuals.layout as layout
import visuals.components as charts
def update_visuals(start_date, end_date): master_data = update_dates(start_date=date(2024, 1, 1), end_date=date(2026, 1, 1))
# Update the data based on the selected date range data = update_data(master_data)
master = charts.update_dates(start_date, end_date)
data = charts.update_data(master)
return layout.create_layout(data)
# Initialize the app with a dark theme
app = dash.Dash(external_stylesheets=[dbc.themes.DARKLY])
# App layout app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY])
app.layout = update_visuals()
@app.callback( @app.callback(
[ Output("layout-container", "children"),
Input('date-picker-range', 'start_date'), [Input('date-picker-range', 'start_date'),
Input('date-picker-range', 'end_date') Input('date-picker-range', 'end_date')]
] )
) def update_layout(start_date,end_date):
master_data = update_dates(start_date, end_date)
data = update_data(master_data)
return create_layout(data)
app.layout = create_layout(data)