grosze
This commit is contained in:
+48
-2
@@ -190,17 +190,63 @@ async def nbp_rate():
|
||||
)
|
||||
|
||||
|
||||
CSV_MONEY_FIELDS = {
|
||||
"rata",
|
||||
"kapital",
|
||||
"odsetki",
|
||||
"nadplata",
|
||||
"prowizja_nadplaty",
|
||||
"saldo",
|
||||
"odsetki_narastajaco",
|
||||
"koszt_narastajaco",
|
||||
"nadplaty_narastajaco",
|
||||
}
|
||||
CSV_SUMMARY_MONEY_FIELDS = {
|
||||
"total_paid",
|
||||
"total_interest",
|
||||
"total_overpayment",
|
||||
"total_overpayment_fees",
|
||||
"interest_saved",
|
||||
"baseline_interest",
|
||||
"average_payment",
|
||||
"max_payment",
|
||||
}
|
||||
|
||||
|
||||
def _csv_money(value: float) -> str:
|
||||
return f"{float(value):.2f}".replace(".", ",")
|
||||
|
||||
|
||||
@app.post("/api/export/csv")
|
||||
def export_csv(req: SimulationRequest):
|
||||
result = simulate(req)
|
||||
buf = io.StringIO()
|
||||
writer = csv.writer(buf, delimiter=";")
|
||||
writer.writerow(["miesiac", "data_splaty", "dni", "oprocentowanie", "rata", "kapital", "odsetki", "nadplata", "prowizja_nadplaty", "saldo", "karencja", "odsetki_narastajaco", "koszt_narastajaco", "nadplaty_narastajaco"])
|
||||
headers = ["miesiac", "data_splaty", "dni", "oprocentowanie", "rata", "kapital", "odsetki", "nadplata", "prowizja_nadplaty", "saldo", "karencja", "odsetki_narastajaco", "koszt_narastajaco", "nadplaty_narastajaco"]
|
||||
writer.writerow(headers)
|
||||
for row in result.schedule:
|
||||
writer.writerow([row.month, row.due_date, row.days, row.rate, row.payment, row.principal_part, row.interest_part, row.overpayment, row.overpayment_fee, row.remaining, row.grace_type.value, row.cumulative_interest, row.cumulative_cost, row.cumulative_overpayment])
|
||||
values = {
|
||||
"miesiac": row.month,
|
||||
"data_splaty": row.due_date,
|
||||
"dni": row.days,
|
||||
"oprocentowanie": row.rate,
|
||||
"rata": row.payment,
|
||||
"kapital": row.principal_part,
|
||||
"odsetki": row.interest_part,
|
||||
"nadplata": row.overpayment,
|
||||
"prowizja_nadplaty": row.overpayment_fee,
|
||||
"saldo": row.remaining,
|
||||
"karencja": row.grace_type.value,
|
||||
"odsetki_narastajaco": row.cumulative_interest,
|
||||
"koszt_narastajaco": row.cumulative_cost,
|
||||
"nadplaty_narastajaco": row.cumulative_overpayment,
|
||||
}
|
||||
writer.writerow([_csv_money(values[h]) if h in CSV_MONEY_FIELDS else values[h] for h in headers])
|
||||
writer.writerow([])
|
||||
writer.writerow(["Podsumowanie"])
|
||||
for key, value in result.summary.model_dump().items():
|
||||
if key in CSV_SUMMARY_MONEY_FIELDS:
|
||||
value = _csv_money(value)
|
||||
writer.writerow([key, value])
|
||||
data = buf.getvalue().encode("utf-8-sig")
|
||||
return StreamingResponse(
|
||||
|
||||
Reference in New Issue
Block a user