3d31f465ecaa270e8892c20b801b022bed47cc4a
- Tambah CashStatsWidget: total saldo, pemasukan/pengeluaran bulan ini, saldo bulan lalu - Widget hanya tampil di halaman transaksi kas (bukan dashboard) - Hanya transaksi yang sudah diverifikasi masuk ke perhitungan total kas - Perbaiki namespace Action notifikasi (Filament v5) - Perbaiki observer: hapus throw Exception yang menyebabkan widget hilang - Tambah redirect setelah aksi setujui/tolak/verifikasi agar halaman refresh otomatis - Tambah file DOKUMENTASI.md
Persegi — Sistem Manajemen Organisasi Pemuda Desa
Sistem web production-ready untuk Organisasi Pemuda Desa Persegi, berlokasi di Desa Karangdadap, Kecamatan Kalibagor, Kabupaten Banyumas.
Teknologi
| Layer | Stack |
|---|---|
| Backend | Laravel 13 |
| Admin Panel | Filament 5.x |
| Authorization | Filament Shield + Spatie Permission |
| Database | MySQL |
| Frontend Publik | Blade |
| Realtime | Livewire |
Struktur Direktori
app/
├── Filament/
│ ├── Resources/ # Admin panel resources
│ │ ├── Activities/ # Manajemen kegiatan
│ │ ├── Approvals/ # Multi-approval
│ │ ├── Audits/ # Audit internal
│ │ ├── CashCategories/ # Kategori kas
│ │ ├── CashRecords/ # Transaksi kas
│ │ ├── ContactMessages/# Pesan dari publik
│ │ ├── Divisions/ # Divisi organisasi
│ │ ├── Posts/ # Konten publik
│ │ ├── Users/ # Manajemen anggota
│ │ └── Votes/ # Sistem voting
│ └── Widgets/
│ ├── StatsOverview.php # Widget dashboard utama
│ ├── CashStatsWidget.php # Widget statistik kas (halaman transaksi)
│ └── ActivityLogWidget.php # Widget log aktivitas
├── Models/
│ ├── User.php # Anggota / pengguna sistem
│ ├── Division.php # Divisi organisasi
│ ├── Activity.php # Kegiatan
│ ├── CashRecord.php # Transaksi kas
│ ├── CashCategory.php # Kategori kas (pemasukan/pengeluaran)
│ ├── Vote.php # Voting
│ ├── VoteItem.php # Pilihan suara per user
│ ├── Approval.php # Multi-approval
│ ├── ApprovalItem.php # Keputusan per approver
│ ├── Audit.php # Temuan audit
│ ├── AuditResponse.php # Respons atas temuan audit
│ ├── MemberStatusLog.php # Riwayat perubahan status anggota
│ ├── ActivityLog.php # Log global semua aksi
│ ├── Post.php # Artikel/berita publik
│ └── ContactMessage.php # Pesan kontak dari publik
└── Observers/
├── CashRecordObserver.php
├── ActivityObserver.php
└── UserObserver.php
Role & Hak Akses
| Role | Deskripsi |
|---|---|
super_admin |
Full akses, bisa override semua, semua aksi di-log |
ketua |
Approval kegiatan, verifikasi kas, lihat semua data |
bendahara |
Input & kelola transaksi kas |
pengurus |
Submit kegiatan ke pending |
anggota |
Akses terbatas, lihat data sendiri |
auditor |
Read-only + bisa buat temuan audit |
Fitur & Use Case
1. Manajemen Anggota
Aktor: ketua, pengurus, super_admin
| Use Case | Deskripsi |
|---|---|
| Tambah anggota | Input data: nama, telepon, alamat, divisi, status |
| Ubah status anggota | Aktif → Nonaktif wajib isi inactive_reason |
| Lihat riwayat status | Semua perubahan status tercatat di member_status_logs |
| Filter per divisi | Anggota bisa difilter berdasarkan divisi |
Business rule:
- Hanya ketua, pengurus, super_admin yang bisa ubah status
- Setiap perubahan status otomatis dicatat ke
member_status_logsvia Observer
2. Struktur Organisasi (Divisi)
Aktor: ketua, super_admin
| Use Case | Deskripsi |
|---|---|
| Kelola divisi | CRUD divisi organisasi |
| Lihat anggota per divisi | Relasi one-to-many ke User |
3. Kegiatan
Aktor: pengurus (buat), ketua (approve), semua (lihat)
| Use Case | Deskripsi |
|---|---|
| Buat kegiatan | Status awal: draft |
| Submit ke review | draft → pending (oleh pengurus) |
| Approve/Tolak | pending → approved / rejected (oleh ketua) |
| Tandai selesai | Wajib isi executed_at + execution_notes |
| Kelola peserta | Many-to-many anggota ↔ kegiatan |
Workflow status:
draft → pending → approved → (executed_at diisi)
→ rejected
4. Keuangan (Kas)
Aktor: bendahara (input), ketua & super_admin (verifikasi & lihat)
| Use Case | Deskripsi |
|---|---|
| Input transaksi | Bendahara input pemasukan/pengeluaran |
| Verifikasi transaksi | Ketua/super_admin verifikasi, setelah itu data terkunci |
| Lihat statistik kas | Widget di halaman transaksi: total saldo, pemasukan/pengeluaran bulan ini, saldo bulan lalu |
| Filter transaksi | Filter per kategori, tanggal, status verifikasi |
Business rule:
- Setelah
verified_atterisi, data tidak bisa diubah/dihapus - Threshold keuangan:
- < Rp 500.000 → bendahara saja
- Rp 500.000 – Rp 2.000.000 → butuh persetujuan ketua
-
Rp 2.000.000 → multi-approval atau voting
5. Voting
Aktor: semua role (sesuai permission)
| Use Case | Deskripsi |
|---|---|
| Buat voting | Tipe: activity, finance, general |
| Beri suara | Pilihan: approve, reject, abstain |
| Tutup voting | Status: open → closed |
| Lihat hasil | Mayoritas >50% untuk lolos |
6. Multi-Approval
Aktor: role yang ditentukan per approval
| Use Case | Deskripsi |
|---|---|
| Buat approval | Tentukan jumlah approval yang dibutuhkan |
| Beri keputusan | Tiap approver bisa approve/reject + catatan |
| Cek status | Lolos jika jumlah approve terpenuhi |
7. Audit Internal
Aktor: auditor (buat temuan), pengurus/ketua (respons)
| Use Case | Deskripsi |
|---|---|
| Buat temuan | Tipe: warning / critical, bisa terkait model apapun |
| Respons temuan | Pihak terkait bisa balas temuan audit |
| Pantau status | Auditor bisa track status penyelesaian |
8. Konten Publik
Aktor: pengurus, ketua, super_admin
| Use Case | Deskripsi |
|---|---|
| Buat artikel/berita | Post dengan status draft / published |
| Website publik | Halaman publik berbasis Blade untuk masyarakat |
| Pesan kontak | Masyarakat bisa kirim pesan, admin bisa lihat & balas |
9. Dashboard
Widget yang tampil di halaman utama admin:
| Widget | Isi |
|---|---|
| StatsOverview | Anggota aktif, total kas, kegiatan berjalan, kegiatan pending |
| ActivityLogWidget | Log aktivitas terbaru di sistem |
Widget khusus halaman transaksi:
| Widget | Isi |
|---|---|
| CashStatsWidget | Total saldo, pemasukan bulan ini, pengeluaran bulan ini, saldo bulan lalu |
Log & Audit Trail
Semua aksi penting otomatis dicatat via Observer:
| Event | Dicatat di |
|---|---|
| Perubahan status anggota | member_status_logs |
| Transaksi kas baru | activity_logs |
| Verifikasi kas | activity_logs |
| Approval kegiatan | activity_logs |
| Eksekusi kegiatan | activity_logs |
Keamanan
- Setiap resource dilindungi Laravel Policy
- Permission granular dikelola via Filament Shield
- Fitur impersonate: super_admin bisa login sebagai user lain (untuk debugging/support)
- Input divalidasi di semua form
Instalasi
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
php artisan shield:generate --all
php artisan shield:super-admin --user=1
Akses admin panel: /dashboard
Description
Languages
PHP
71.2%
Blade
28.4%
CSS
0.3%
JavaScript
0.1%