EAS - MyCashFlow
Nama: Danar Sodik Priyambodo
Kelas: PPB - A
NRP: 5025211145
My Cash Flow untuk keuangan anda
Di era digital saat ini, pengelolaan keuangan pribadi menjadi salah satu aspek penting dalam kehidupan sehari-hari. Banyak individu mengalami kesulitan dalam melacak pemasukan dan pengeluaran mereka secara manual, yang dapat menyebabkan kurangnya kontrol atas kondisi finansial. Aplikasi "My Cash Flow" dikembangkan sebagai solusi modern untuk mengatasi masalah ini. Aplikasi ini dirancang untuk menjadi alat yang intuitif dan mudah digunakan bagi pengguna untuk mencatat setiap transaksi keuangan, memantau arus kas, dan mendapatkan gambaran yang jelas tentang kesehatan finansial mereka melalui perangkat Android.
1. Model Data
Semua transaksi direpresentasikan oleh data class Transaction dengan tipe (pemasukan/pengeluaran), kategori, nominal, dan tanggal.
Penjelasan
- id: identifier unik untuk transaksi.
- type: membedakan pemasukan (INCOME) dan pengeluaran (EXPENSE).
- category & amount: keterangan dan nilai nominal.
- date: waktu transaksi disimpan sebagai Long (timestamp). Nilai bawaan adalah tanggal saat transaksi dibuat.
- load(): mengubah JSON tersimpan menjadi objek Transaction lalu mengembalikan MutableList<Transaction>.
- save(): membuat JSONArray, menambahkan setiap transaksi ke array, lalu menyimpan string JSON ke SharedPreferences.
- Data disimpan di bawah kunci transactions_json.
- init: saat ViewModel dibuat, data dimuat dari TransactionRepository dan nextId disesuaikan.
- addTransaction/updateTransaction/deleteTransaction: operasi CRUD yang memodifikasi daftar transaksi lalu memanggil persist() untuk menyimpan ke penyimpanan permanen.
- Dengan Compose, perubahan pada mutableStateListOf otomatis membuat tampilan memperbarui diri.
- type, category, amount, dan dateMillis disimpan dalam remember.
- DatePickerDialog muncul saat pengguna menekan ikon kalender, mengubah dateMillis.
- onSave memanggil callback dengan data yang sudah diubah, mendukung pembuatan baru maupun edit.
- Jika transaksi sudah ada dan onDelete tersedia, tombol Hapus juga muncul.
- Filter kategori dan filter tipe (pemasukan/pengeluaran/semua) memanfaatkan DropdownMenu dan FilterChip.
- Sort memberi pilihan tanggal terlama/terbaru atau nominal kecil/besar.
- Hanya 50 transaksi pertama yang ditampilkan, sisanya muncul saat pengguna menekan tombol “Tampilkan Semua”.
- Setiap kartu transaksi menampilkan jenis (label warna hijau/merah), kategori, tanggal, dan nominal.
- Dua DatePickerDialog memungkinkan pemilihan tanggal awal dan akhir. Filter diterapkan pada daftar transaksi setelah menekan tombol Terapkan.
- Tombol bergambar ikon PDF memanggil ExportUtils.export() untuk menyimpan hasil filter ke file PDF dan menampilkan lokasi file lewat Toast.
- BalanceChart menggambar grafik garis saldo kumulatif berdasarkan tanggal transaksi, lengkap dengan label tanggal dan nilai saldo di setiap titik.
- Membuat PdfDocument ukuran A4.
- Memisahkan transaksi menjadi dua bagian: Pemasukan dan Pengeluaran, masing-masing digambar dengan judul dan kolom Tanggal, Kategori, dan Nominal.
- Setelah semua item dicetak, menuliskan total pemasukan, pengeluaran, dan saldo akhir.
- File disimpan pada direktori getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS) dengan nama transactions.pdf.
- viewModel disediakan dengan delegasi by viewModels().
- Kondisi when menentukan tampilan mana yang aktif:
- Form tambah/edit (AddEditTransactionScreen).
- Laporan (ReportScreen).
- Daftar transaksi (TransactionListScreen).
- Setelah menambah, mengedit, atau menghapus transaksi, status showForm diubah agar kembali ke daftar.
- Data dikelola dalam TransactionViewModel dan disimpan permanen oleh TransactionRepository.
- Formulir transaksi, daftar dengan filter dan sort, hingga laporan PDF digabungkan dalam MainActivity.
- Fungsi ExportUtils.export memberikan kemampuan ekspor PDF, sedangkan ReportScreen menampilkan grafik saldo kumulatif dengan Canvas.
Komentar
Posting Komentar