Compare commits

..

3 Commits

3 changed files with 48 additions and 3 deletions

46
calc.py
View File

@@ -1,9 +1,11 @@
# calc.py # calc.py
from datetime import datetime, timedelta from datetime import datetime, timedelta
from defines import END_YEAR from defines import END_YEAR
from db import get_historical_data
# GLOBAL CONSTANTS # GLOBAL CONSTANTS
LEASE = 0 LEASE = 0
ANNOT_LIMIT = 1000
# Dates that don't change # Dates that don't change
first_pay_date = datetime(2026,1,8) first_pay_date = datetime(2026,1,8)
@@ -20,7 +22,7 @@ def bill_amount_today(finance, day, bill_data, bt_id_name, total ):
# there may be more than one bill on this day, keep add amount and keep going in loop # there may be more than one bill on this day, keep add amount and keep going in loop
if b['bill_date'] == day_str: if b['bill_date'] == day_str:
amt += b['amount'] amt += b['amount']
if b['amount'] > 1000: if b['amount'] > ANNOT_LIMIT:
n=bt_id_name[ b['bill_type'] ] n=bt_id_name[ b['bill_type'] ]
print( f"bill_amt_today {n} for {day_str} has amt={b['amount']}" ) print( f"bill_amt_today {n} for {day_str} has amt={b['amount']}" )
add_annotation(finance, day, total-b['amount'], -b['amount'], f"Pay {n}" ) add_annotation(finance, day, total-b['amount'], -b['amount'], f"Pay {n}" )
@@ -31,7 +33,6 @@ def bill_amount_today(finance, day, bill_data, bt_id_name, total ):
return amt return amt
def add_annotation(finance, dt, total, delta, text): def add_annotation(finance, dt, total, delta, text):
# dont add an annotation for small changes (jic)
tm = dt.timestamp() * 1000 tm = dt.timestamp() * 1000
if delta > 0: if delta > 0:
text += f": ${int(abs(delta))}" text += f": ${int(abs(delta))}"
@@ -315,3 +316,44 @@ def calc_key_dates( finance ):
return key_dates return key_dates
################################################################################
# go through finance_history table, find big items to make annoations from
################################################################################
def add_historical_annotations( finance ):
added={}
hist=get_historical_data()
day=hist[0]['M_payout_date'];
amt=hist[0]['M_payout'];
dt = datetime.strptime(day, "%Y-%m-%d")
# cover Mandys resignation
add_annotation(finance, dt, hist[0]['Savings']+amt, amt, "M Resigned" )
# cover O/S trip
for h in hist:
if 'Overseas_trip' in h and h['Overseas_trip']:
last_mpd=h['Overseas_trip_date']
last_mpd_savings=h['Savings']
snap_dt=datetime.strptime(h['snapshot_date'], "%Y-%m-%d")
# keep every savings value until we find the last one before the school fees are paid
if snap_dt < school_fees_date:
savings_b4_sfd = h['Savings']
dt = datetime.strptime(last_mpd, "%Y-%m-%d")
# HARDCODING this, based on post-analysis of CC charges (AND this dt is post most of the spend, so dont adjust)
amt = 33405.01
print( f"last_mpd_savings={last_mpd_savings}" )
add_annotation(finance, dt, last_mpd_savings, -amt, "O/S trip" )
print( f"should have added o/s trip (-{amt}) - lpd {last_mpd} == {dt}, savings = {last_mpd_savings}" )
# cover School Fees for 2025
amt = hist[0]['School_Fees']
print( f"savings_b4_sfd ={savings_b4_sfd}")
add_annotation(finance, school_fees_date, savings_b4_sfd-amt, -amt, "Pay school fees" )
# go through bills from oldest historical date until 'today' and add any > AMT_LIMIT
return

View File

@@ -1,6 +1,6 @@
# main.py # main.py
from flask import Flask, render_template, request, redirect, url_for, Response, jsonify from flask import Flask, render_template, request, redirect, url_for, Response, jsonify
from calc import calculate_savings_depletion, calc_key_dates from calc import calculate_savings_depletion, calc_key_dates, add_historical_annotations
from db import init_db, get_historical_data, get_finance_data, update_finance, get_budget_data from db import init_db, get_historical_data, get_finance_data, update_finance, get_budget_data
from db import insert_cset, get_comp_set_data, get_comp_set_options, delete_cset from db import insert_cset, get_comp_set_data, get_comp_set_options, delete_cset
from db import get_bill_freqs, get_bill_growth_types from db import get_bill_freqs, get_bill_growth_types
@@ -32,6 +32,7 @@ def index():
bill_data = get_bill_data("order_by_date_only") bill_data = get_bill_data("order_by_date_only")
bill_types = get_bill_types() bill_types = get_bill_types()
depletion_date, savings_per_fortnight, final_savings = calculate_savings_depletion(finance_data, bill_data, bill_types) depletion_date, savings_per_fortnight, final_savings = calculate_savings_depletion(finance_data, bill_data, bill_types)
add_historical_annotations( finance_data )
BUDGET=get_budget_data(finance_data) BUDGET=get_budget_data(finance_data)
if depletion_date: if depletion_date:

View File

@@ -17,6 +17,7 @@
<style> <style>
.col-form-label { width:140px; } .col-form-label { width:140px; }
html { font-size: 75% !important; } html { font-size: 75% !important; }
@media (max-width: 2000px) { html { font-size: 70% !important; } }
</style> </style>
</head> </head>
<body> <body>
@@ -340,6 +341,7 @@
xAxis: { xAxis: {
type: 'datetime', type: 'datetime',
title: { text: 'Date' }, title: { text: 'Date' },
min: Date.UTC(2024, 6, 1),
plotBands: plotBands // Alternating background for years plotBands: plotBands // Alternating background for years
}, },
yAxis: { title: { text: 'Amount ($)' } }, yAxis: { title: { text: 'Amount ($)' } },