added now var to support save dialog naming based on now (YYYY-MM-DD), and removed export functionality. stub for saving data is there
This commit is contained in:
84
main.py
84
main.py
@@ -69,7 +69,14 @@ def index():
|
||||
r.append( FP_VAR( 'FINAL # of TLS', 'TLS', 'readonly' ) )
|
||||
DISP.append(r)
|
||||
|
||||
return render_template('index.html', finance=finance_data, depletion_date=depletion_date, savings=savings_per_fortnight, BUDGET=BUDGET, COMP=COMP, DISP=DISP)
|
||||
now=datetime.today().strftime('%Y-%m-%d')
|
||||
return render_template('index.html', now=now, finance=finance_data, depletion_date=depletion_date, savings=savings_per_fortnight, BUDGET=BUDGET, COMP=COMP, DISP=DISP)
|
||||
|
||||
@app.route('/save', methods=['POST'])
|
||||
def save():
|
||||
for el in request.form:
|
||||
print(f"SAVE: {el}={request.form[el]}")
|
||||
return "200"
|
||||
|
||||
@app.route('/update', methods=['POST'])
|
||||
def update():
|
||||
@@ -104,81 +111,6 @@ def update():
|
||||
|
||||
return redirect(url_for('index'))
|
||||
|
||||
@app.route("/download_csv", methods=["GET"])
|
||||
def download_csv():
|
||||
|
||||
finance_data = get_finance_data()
|
||||
depletion_date, savings_per_fortnight, final_savings = calculate_savings_depletion(finance_data)
|
||||
BUDGET=get_budget_data(finance_data)
|
||||
|
||||
# Group data by year
|
||||
data_by_year = defaultdict(list)
|
||||
for date_str, amount in savings_per_fortnight:
|
||||
year = date_str.split("-")[0] # Extract the year from the date
|
||||
data_by_year[year].append((date_str, amount))
|
||||
|
||||
# Determine the maximum number of entries for any year
|
||||
max_entries_per_year = max(len(entries) for entries in data_by_year.values())
|
||||
|
||||
# Sort years for column ordering
|
||||
years = sorted(data_by_year.keys())
|
||||
|
||||
# get finance data into a list for spitting out during csv last column dump
|
||||
fd_lst = list(finance_data.items())
|
||||
fd_lst[0]=('Variable', 'Value')
|
||||
|
||||
# Create an in-memory output file
|
||||
output = io.StringIO()
|
||||
|
||||
# Create a CSV writer object
|
||||
writer = csv.writer(output)
|
||||
|
||||
# Write header: each year gets two columns (Date, Value)
|
||||
header = []
|
||||
for year in years:
|
||||
header.extend([f"{year}-Date", f"{year}-Value"])
|
||||
writer.writerow(header)
|
||||
|
||||
# Write the data rows
|
||||
cnt=0
|
||||
for i in range(max_entries_per_year):
|
||||
row = []
|
||||
for year in years:
|
||||
# Add date and value if they exist for the current index
|
||||
if i < len(data_by_year[year]):
|
||||
date, value = data_by_year[year][i]
|
||||
row.extend([date, value])
|
||||
else:
|
||||
row.extend(["", ""]) # If no data for this year, leave blank cells
|
||||
|
||||
# spacer
|
||||
row.extend([""])
|
||||
|
||||
# now add budget data
|
||||
if cnt < len(BUDGET):
|
||||
row.extend( BUDGET[cnt] )
|
||||
else:
|
||||
row.extend(["", ""]) # If no data for this year, leave blank cells
|
||||
|
||||
# spacer
|
||||
row.extend([""])
|
||||
|
||||
# now add reference data
|
||||
if cnt < len(fd_lst):
|
||||
row.extend(fd_lst[cnt])
|
||||
writer.writerow(row)
|
||||
|
||||
cnt += 1
|
||||
|
||||
csv_data = output.getvalue()
|
||||
|
||||
# Create a Flask Response object, with CSV mime type and downloadable as a file
|
||||
return Response(
|
||||
csv_data,
|
||||
mimetype="text/csv",
|
||||
headers={"Content-disposition": "attachment; filename=finance_data.csv"}
|
||||
)
|
||||
|
||||
# Main program
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True)
|
||||
|
||||
Reference in New Issue
Block a user