GarGerry commited on
Commit
1f7ab52
·
verified ·
1 Parent(s): e6b413d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -16
app.py CHANGED
@@ -1,6 +1,22 @@
1
  import streamlit as st
2
  import pandas as pd
3
  import matplotlib.pyplot as plt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  def main():
6
  st.title("Financial Budget Planner 💰")
@@ -13,20 +29,18 @@ def main():
13
  st.subheader("Pengeluaran Bulanan")
14
  categories = ["Makanan", "Transportasi", "Hiburan", "Tagihan", "Tabungan", "Lainnya"]
15
  expenses = {}
16
- total_expense = 0
17
 
18
  for category in categories:
19
  expenses[category] = st.number_input(f"{category} (Rp)", min_value=0, step=50000)
20
- total_expense += expenses[category]
21
 
22
  # Sisa saldo
23
- remaining_balance = income - total_expense
24
  st.subheader("Ringkasan Keuangan")
25
- st.write(f"Total Pengeluaran: Rp {total_expense:,}")
26
  st.write(f"Sisa Saldo: Rp {remaining_balance:,}")
27
 
28
  # Visualisasi data
29
- if total_expense > 0:
30
  df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
31
  fig, ax = plt.subplots()
32
  ax.pie(df["Jumlah"], labels=df["Kategori"], autopct='%1.1f%%', startangle=90, colors=["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0", "#ffb3e6"])
@@ -43,20 +57,25 @@ def main():
43
  if remaining_balance < 0:
44
  st.warning("⚠️ Pengeluaran lebih besar dari pemasukan! Pertimbangkan untuk mengurangi pengeluaran.")
45
 
46
- # Laporan Keuangan
47
- st.subheader("Laporan Keuangan 📊")
48
- if total_expense > 0:
49
- report_df = pd.DataFrame({
50
- "Kategori": list(expenses.keys()),
51
- "Pengeluaran (Rp)": list(expenses.values())
52
- })
53
- st.table(report_df)
54
- else:
55
- st.write("Belum ada pengeluaran yang dicatat.")
 
 
 
 
 
56
 
57
  if __name__ == "__main__":
58
  main()
59
 
60
 
61
- #Saya telah menambahkan fitur Laporan Keuangan yang menampilkan pengeluaran per kategori dalam bentuk tabel. Ini membantu pengguna untuk melihat rincian keuangan mereka dengan lebih jelas. Jika ada fitur lain yang ingin diperbaiki atau ditambahkan, beri tahu saya!
62
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import matplotlib.pyplot as plt
4
+ import io
5
+ import pdfkit
6
+
7
+ def generate_pdf_report(expenses, income, remaining_balance):
8
+ html = f"""
9
+ <h1>Laporan Keuangan</h1>
10
+ <p><strong>Total Pemasukan:</strong> Rp {income:,}</p>
11
+ <p><strong>Total Pengeluaran:</strong> Rp {sum(expenses.values()):,}</p>
12
+ <p><strong>Sisa Saldo:</strong> Rp {remaining_balance:,}</p>
13
+ <h2>Detail Pengeluaran</h2>
14
+ <ul>
15
+ {''.join(f'<li>{category}: Rp {amount:,}</li>' for category, amount in expenses.items())}
16
+ </ul>
17
+ """
18
+ pdfkit.from_string(html, "report.pdf")
19
+ return "report.pdf"
20
 
21
  def main():
22
  st.title("Financial Budget Planner 💰")
 
29
  st.subheader("Pengeluaran Bulanan")
30
  categories = ["Makanan", "Transportasi", "Hiburan", "Tagihan", "Tabungan", "Lainnya"]
31
  expenses = {}
 
32
 
33
  for category in categories:
34
  expenses[category] = st.number_input(f"{category} (Rp)", min_value=0, step=50000)
 
35
 
36
  # Sisa saldo
37
+ remaining_balance = income - sum(expenses.values())
38
  st.subheader("Ringkasan Keuangan")
39
+ st.write(f"Total Pengeluaran: Rp {sum(expenses.values()):,}")
40
  st.write(f"Sisa Saldo: Rp {remaining_balance:,}")
41
 
42
  # Visualisasi data
43
+ if sum(expenses.values()) > 0:
44
  df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
45
  fig, ax = plt.subplots()
46
  ax.pie(df["Jumlah"], labels=df["Kategori"], autopct='%1.1f%%', startangle=90, colors=["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0", "#ffb3e6"])
 
57
  if remaining_balance < 0:
58
  st.warning("⚠️ Pengeluaran lebih besar dari pemasukan! Pertimbangkan untuk mengurangi pengeluaran.")
59
 
60
+ # Unduh laporan sebagai CSV
61
+ if st.button("Unduh Laporan CSV"):
62
+ df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
63
+ df.loc[len(df.index)] = ["Total Pengeluaran", sum(expenses.values())]
64
+ df.loc[len(df.index)] = ["Pemasukan", income]
65
+ df.loc[len(df.index)] = ["Sisa Saldo", remaining_balance]
66
+ csv = df.to_csv(index=False).encode("utf-8")
67
+ st.download_button("Download CSV", csv, "laporan_keuangan.csv", "text/csv")
68
+
69
+ # Unduh laporan sebagai PDF
70
+ if st.button("Unduh Laporan PDF"):
71
+ pdf_path = generate_pdf_report(expenses, income, remaining_balance)
72
+ with open(pdf_path, "rb") as pdf_file:
73
+ pdf_bytes = pdf_file.read()
74
+ st.download_button("Download PDF", pdf_bytes, "laporan_keuangan.pdf", "application/pdf")
75
 
76
  if __name__ == "__main__":
77
  main()
78
 
79
 
80
+ #Saya telah menambahkan fitur untuk mengunduh laporan keuangan dalam format CSV dan PDF. Laporan akan mencakup pemasukan, total pengeluaran, sisa saldo, serta detail pengeluaran berdasarkan kategori.
81