diff --git a/visuals/components.py b/visuals/components.py index a941a6c..68c9a60 100644 --- a/visuals/components.py +++ b/visuals/components.py @@ -22,27 +22,17 @@ try: 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(payees, left_on='payee_id', right_on='payee_id', suffix='_payee')\ - .join(dates, left_on='transaction_date', right_on='date_id', suffix='_date')\ - # date filter for callback date range - #.filter(pl.col('transaction_date')) - + .join(dates, left_on='transaction_date', right_on='date_id', suffix='_date') + except Exception as e: logging.error(f'Error joining DataFrames: {e}') sys.exit(ec.BAD_JOIN) 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( - (pl.col('year_date') >= start_year ) & (pl.col('year_date') <= end_year) & - (pl.col('month_date') >= start_month ) & (pl.col('month_date') <= end_month) & - (pl.col('day_date') >= start_day ) & (pl.col('day_date') <= end_day) + (pl.col('year') >= start_date.year ) & (pl.col('year') <= end_date.year) & + (pl.col('month') >= start_date.month ) & (pl.col('month') <= end_date.month) & + (pl.col('day') >= start_date.day ) & (pl.col('day') <= end_date.day) ) return master_data @@ -124,4 +114,10 @@ def update_data(master_data): paper_bgcolor='black', 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 diff --git a/visuals/dash_app.py b/visuals/dash_app.py index e08345f..a6356fb 100644 --- a/visuals/dash_app.py +++ b/visuals/dash_app.py @@ -1,26 +1,27 @@ '''Module to create a Dash app that displays visualizations of YNAB data.''' import dash -import dash_bootstrap_components as dbc +from dash import dcc, html 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): - # Update the data based on the selected date range - master = charts.update_dates(start_date, end_date) - data = charts.update_data(master) - return layout.create_layout(data) +master_data = update_dates(start_date=date(2024, 1, 1), end_date=date(2026, 1, 1)) +data = update_data(master_data) -# Initialize the app with a dark theme -app = dash.Dash(external_stylesheets=[dbc.themes.DARKLY]) -# App layout -app.layout = update_visuals() +app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY]) @app.callback( - [ - Input('date-picker-range', 'start_date'), - Input('date-picker-range', 'end_date') - ] -) \ No newline at end of file + Output("layout-container", "children"), + [Input('date-picker-range', 'start_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)