107 lines
4.9 KiB
Python
107 lines
4.9 KiB
Python
# db.py
|
|
import sqlite3
|
|
|
|
def connect_db():
|
|
conn = sqlite3.connect('finance.db')
|
|
conn.row_factory = sqlite3.Row # This allows us to access columns by name
|
|
return conn
|
|
|
|
def init_db():
|
|
conn = connect_db()
|
|
cur = conn.cursor()
|
|
cur.execute('''CREATE TABLE IF NOT EXISTS finance (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
D_Salary INTEGER,
|
|
D_Num_fortnights_pay INTEGER,
|
|
School_Fees INTEGER,
|
|
Car_loan_via_pay INTEGER,
|
|
Car_loan INTEGER,
|
|
Car_balloon INTEGER,
|
|
Living_Expenses INTEGER,
|
|
Savings INTEGER,
|
|
Interest_Rate REAL,
|
|
Inflation REAL,
|
|
Mich_present INTEGER,
|
|
Overseas_trip INTEGER,
|
|
Mark_reno INTEGER,
|
|
D_leave_owed_in_days REAL,
|
|
D_TLS_shares INTEGER,
|
|
M_TLS_shares INTEGER,
|
|
D_CBA_shares INTEGER,
|
|
TLS_price REAL,
|
|
CBA_price REAL,
|
|
Overseas_trip_date STRING,
|
|
Mark_reno_date STRING,
|
|
Sell_shares INTEGER
|
|
)''')
|
|
|
|
# Check if table is empty, if so insert default values
|
|
cur.execute('SELECT COUNT(*) FROM finance')
|
|
if cur.fetchone()[0] == 0:
|
|
###
|
|
# For now manually update below on the fortnight of the original pay shcedule to compare saved version vs. our reality. Update:
|
|
# Savings (Macq+me bank)
|
|
# TLS/CBA prices
|
|
# Interest rate
|
|
# D_leave_owed_in_days
|
|
# maybe quarterly update Inflation? (this is harder to appreciate, seems much lower officialy than Savings, but which inflation:
|
|
# I've decided to consider food only or overall, whichever is worse - but only found a rabobank reference - THIS IS A MATERIAL ISSUE WITH PROJECTING OUT)
|
|
###
|
|
cur.execute('''INSERT INTO finance (D_Salary, D_Num_fortnights_pay, School_Fees, Car_loan_via_pay, Car_loan, Car_balloon, Living_Expenses, Savings, Interest_Rate,
|
|
Inflation, Mich_present, Overseas_trip, Mark_reno, D_leave_owed_in_days, D_TLS_shares, M_TLS_shares, D_CBA_shares, TLS_price, CBA_price, Overseas_trip_date, Mark_reno_date, Sell_shares)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
|
|
(4762.29, 6, 22000, 620, 1001.12, 45824.68, 83000, 416670.67, 5.0, 3.9, 10000, 32000, 10000, 93.64, 1000, 750, 1095, 3.94, 158.57, '2025-06-01', '2025-09-01', 6))
|
|
# NOTE: 1001.12 car-pay -- is 1017.99 (actual rate) - 16.87 (car park)
|
|
# NOTE: o/s trip. ~ $4kpp flights x3, then ~$3k / week in barcelona accom, $100pp/pd for food ($2k), + spending money
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
def get_finance_data():
|
|
conn = connect_db()
|
|
cur = conn.cursor()
|
|
cur.execute('SELECT * FROM finance WHERE id = 1') # Assuming a single record for simplicity
|
|
finance = cur.fetchone()
|
|
conn.close()
|
|
return dict(finance)
|
|
|
|
def get_budget_data(finance_data, CBA, TLS):
|
|
# annual bills - health ins (5k), rates (2.4), electricity (1.5), gas (2), internet (1.6), car insurance (.7), rego (.8), house insurance (2.4), GFC (2.2), phones (.5), melb. pollen (.03), nabu casa (.1), eweka (.1) --- noting phone is elevated presuming I also go onto Aldi plan, but that there is no family discount
|
|
bills = 19330
|
|
BUDGET=[]
|
|
BUDGET.append( ('Bills', f"${bills:,.2f}") )
|
|
BUDGET.append( ('Buffer', f"${CBA*finance_data['CBA_price']+TLS*finance_data['TLS_price']:,.2f}") )
|
|
BUDGET.append( ('Monthly budget', f"${((finance_data['Living_Expenses']-12000) / 12):,.2f}" ) )
|
|
BUDGET.append( ('Weekly budget', f"${((finance_data['Living_Expenses']-12000) / 52):,.2f}" ) )
|
|
return BUDGET
|
|
|
|
def update_finance(data):
|
|
|
|
conn = connect_db()
|
|
cur = conn.cursor()
|
|
cur.execute('''UPDATE finance SET
|
|
D_Salary = ?,
|
|
D_Num_fortnights_pay = ?,
|
|
School_Fees = ?,
|
|
Car_loan_via_pay = ?,
|
|
Car_loan = ?,
|
|
Car_balloon = ?,
|
|
Living_Expenses = ?,
|
|
Savings = ?,
|
|
Interest_Rate = ?,
|
|
Inflation = ?,
|
|
Mich_present = ?,
|
|
Overseas_trip = ?,
|
|
Mark_reno = ?,
|
|
D_leave_owed_in_days = ?,
|
|
D_TLS_shares = ?,
|
|
M_TLS_shares = ?,
|
|
D_CBA_shares = ?,
|
|
TLS_price = ?,
|
|
CBA_price = ?,
|
|
Overseas_trip_date = ?,
|
|
Mark_reno_date = ?,
|
|
Sell_shares = ?
|
|
WHERE id = 1''', data)
|
|
conn.commit()
|
|
conn.close()
|