# Aplikasi Tabungan Sekolah, PHP Native MVC

## Instalasi baru

1. Ekstrak folder `tabungan_sekolah` ke `htdocs` XAMPP atau folder `www` Laragon.
2. Aktifkan Apache dan MySQL.
3. Buka phpMyAdmin lalu import `database/tabungan_sekolah.sql`.
4. Pastikan `config/config.php` memakai:
   - `DB_NAME`: `tabungan_sekolah`
   - `BASE_URL`: sesuai nama folder aplikasi.
5. Buka `http://localhost/tabungan_sekolah/`.
6. Login awal: username `admin`, password `admin123`.

## Upgrade database lama

1. Cadangkan database terlebih dahulu.
2. Pilih database lama melalui phpMyAdmin.
3. Jalankan `database/upgrade_perbaikan_aplikasi.sql`.
4. Pastikan `DB_NAME` di `config/config.php` sesuai nama database yang digunakan.

## Perbaikan utama versi ini

- Tambah dan edit siswa tidak gagal ketika tanggal lahir dikosongkan.
- Validasi kelas, jenis kelamin, status, NIS, dan NISN.
- Kolom lama yang tidak tersedia tidak lagi langsung menyebabkan query CRUD rusak.
- Fungsi edit dan hapus transaksi tabungan telah ditambahkan.
- Edit dan hapus transaksi memeriksa saldo agar tidak menghasilkan saldo minus.
- Fungsi profil sekolah kembali membaca database dengan benar.
- Nama database pada konfigurasi disamakan dengan file SQL.
- Validasi pinjaman dan angsuran, termasuk pencegahan pembayaran melebihi sisa pinjaman.
- Pencegahan penghapusan master yang masih dipakai oleh transaksi.
- Pesan error disimpan sebagai notifikasi, bukan halaman putih fatal.
- Validasi pengguna, username ganda, akun aktif, dan larangan menghapus akun sendiri.
- Upload logo dibatasi pada gambar valid maksimal 2 MB.

## Kebutuhan server

- PHP 7.4 atau lebih baru.
- Ekstensi PHP `pdo_mysql`.
- Ekstensi PHP `fileinfo` untuk validasi upload logo.
- Ekstensi PHP `curl` jika fitur WhatsApp digunakan.
- Apache `mod_rewrite` aktif bila memakai `.htaccess`.

## Catatan

- Ubah password admin setelah login pertama.
- Jangan menghapus siswa, guru, kelas, atau pengguna yang sudah memiliki riwayat transaksi. Gunakan status tidak aktif bila tersedia.
- Backup database sebelum menjalankan skrip upgrade.
