Commit Graph
56 Commits
Author SHA1 Message Date
Sari 3bfad9cf42 hak akses konsisten: sidebar Master Data pakai permission per-menu (+directive canAnyPermission); FIX direktif canPermission pakai canPermission() model (sebelumnya hanya role kolom — multi-role & user tanpa kolom role tidak dapat menu) + test 2026-08-03 09:58:52 +07:00
Sari 465be127ec update hak akses role: view-point-audit terkunci 'Khusus Admin' (badge + kunci di UI, proteksi di backend update()) + test 2026-08-03 09:51:28 +07:00
Sari 156841a4e7 fix: kirim WA tidak menutup aplikasi — fetch AJAX + SweetAlert dengan tombol Buka WhatsApp (tab baru, aplikasi tetap terbuka) + test JSON 2026-08-03 09:46:00 +07:00
Sari 47c5cdb48f fix: hotfix blade @endif ganda di users/index (penyebab error 500) 2026-08-03 09:41:49 +07:00
Sari 5a4fada9a9 feat: tombol Kirim Akun via WhatsApp di manajemen user (generate password baru, link+username+password via wa.me, konfirmasi, disable tanpa HP) + test 2026-08-03 09:39:20 +07:00
Sari f5a80fd4e2 feat: kolom phone di manajemen user (tampil di tabel, input modal, validasi regex) + FIX bug: catch-all exception handler mengubah ValidationException jadi 500 (kini redirect+error normal) 2026-08-03 09:30:14 +07:00
Sari 2e7ab00c31 fix: menu Riwayat Poin pindah ke seksi Administrasi, akses khusus admin (revoke semua role non-admin) 2026-08-03 09:20:23 +07:00
Sari 2dda08bb8d feat: audit log poin — catat pencatatan/penghapusan pelanggaran (sebelum/sesudah/delta, metadata snapshot, actor, IP) + halaman Riwayat Poin (filter, permission view-point-audit) + 4 feature test 2026-08-03 09:12:46 +07:00
Sari 6f430f35d7 kop laporan: format resmi sekolah (logo lambang Jatim kiri + 6 baris teks tengah + garis hitam tebal) — settings Kop Surat baru + upload logo kop 2026-08-03 09:07:50 +07:00
Sari e18fe3deb2 laporan: tampilkan deskripsi pelanggaran di kolom jenis (web+PDF); TEST GUARD: blokir test bila DB bukan *_test (cegah RefreshDatabase menghancurkan produksi saat config ter-cache) 2026-08-03 09:01:47 +07:00
Sari b1662e6242 polish: halaman Laporan premium full-width (hero gradient, filter cepat, KPI 4 kartu, rekap jenis progress bar + kelas, rincian terbaru) + refactor controller (baseQuery/filters/stats) 2026-08-03 08:56:31 +07:00
Sari c5a2ad6913 feat: laporan rekap pelanggaran PDF (per periode/kelas, scoping wali kelas) + infrastruktur test MySQL (phpunit, fix migrasi 1093, UserFactory username) 2026-08-03 08:50:52 +07:00
Novy San87 58ffd06625 fix: presensi - filter tanggal-kelas live, urutan tanggal di depan, pembersihan data yatim 2026-08-02 20:57:14 +07:00
Novy San87 6e256661dd feat: Face ID (scan, register, liveness) + role baru KS/Waka/Ketua Tim + notifikasi WA ortu + scoping wali kelas + error pages premium 2026-08-02 20:57:11 +07:00
Novy San87 0a5f471854 fix: default presensi 'belum', perbesar tombol rekap & bulk H/S/I/A/T
- Default status per jam dari 'hadir' jadi 'belum' (abu-abu '—')
- Tambah validasi skip 'belum' saat simpan
- Tombol bulk H/S/I/A/T diperbesar (w-8 h-8, border-2)
- Tombol Rekap Presensi diubah ke gradien violet-indigo
- Gradien tombol Lanjutkan & Simpan konsisten
2026-07-28 12:37:43 +07:00
Bro 9aa79dacbb fix: copy token pake execCommand() biar jalan di HTTP 2026-07-24 19:53:41 +07:00
Bro e7639e5edf fix: tombol salin token pake ID langsung, bukan nextElementSibling 2026-07-24 19:51:26 +07:00
Bro 70da27b26e revert: hapus test koneksi E-Jurnal dari sinkronisasi 2026-07-24 19:49:26 +07:00
Bro b82b34e542 feat: status + test koneksi E-Jurnal di sinkronisasi 2026-07-24 19:43:18 +07:00
Bro 9c32843254 feat: icon sidebar warna warni per menu
- Dashboard: biru
- Input Pelanggaran: hijau (emerald)
- Data Pelanggaran: merah
- Data Siswa: ungu (violet)
- Presensi Siswa: cyan
- Surat Peringatan: amber
- Pengaturan: abu-abu
- dll

Aktif: warna solid, Tidak aktif: transparan 60%,
hover: warna semakin jelas
2026-07-24 19:39:04 +07:00
Bro 3e73d675d2 fix: full width layout halaman hak akses role 2026-07-24 19:34:24 +07:00
Bro 813af07cee fix: checkbox standar di hak akses role 2026-07-24 19:33:29 +07:00
Bro 916a9e36df fix: checkbox toggle pake peer-checked CSS, gak perlu JS
Sebelum: onclick + onchange JS — checkbox gak berfungsi
Sesudah: peer-checked:opacity-100 — murni CSS, klik langsung
berfungsi, icon centang muncul/sembunyi otomatis
2026-07-24 19:31:48 +07:00
Bro 4afe6dbabe feat: UI premium Hak Akses Role
- Per group: card terpisah dengan gradient header + icon
- Role columns: badge dengan icon (crown untuk admin)
- Checkbox: toggle button blue modern dengan ikon check
- Hover: gradient biru tipis di baris + icon group berubah warna
- Save section: gradient card dengan shadow
- Transisi mulus semua interaksi
2026-07-24 19:29:43 +07:00
Bro 0ece259138 feat: custom halaman error 403 & 404 premium
- 403: icon shield, merah soft, pesan dinamis
- 404: icon map, amber soft
- Tombol Kembali + Dashboard
- Dekorasi dots
- Menggunakan layout app (navbar + sidebar tetap)
2026-07-24 19:25:43 +07:00
Bro 89e97c3679 fix: hak akses role - tambah label & cache untuk role other
- Role label: Other (Guest) di tabel permission
- Cache di-clearing untuk role 'other' setelah update
- Semua role dinamis dari controller
2026-07-24 19:17:15 +07:00
Bro 6f33f7712d feat: reset password user dari admin
- Tombol key (oranye) di samping edit user
- Klik → SweetAlert2 modal: input password baru + konfirmasi
- Validasi: min 6 karakter, harus cocok
- Admin tidak bisa reset password sendiri (lewat profil)
2026-07-24 19:08:40 +07:00
Bro 243a609baf feat: tambah role 'other' untuk guest user
- PermissionController: tambah 'other' ke daftar role
- UserController validasi: in:admin,bk,wali_kelas,staff,other
- User model: helper isOther()
- Users view: filter dropdown + modal tambah user + label
- Role 'other' bisa diatur hak aksesnya di menu Hak Akses Role
2026-07-24 19:05:50 +07:00
Bro 5c0c3bdd48 feat: dropdown Kelas dependen berdasarkan Jurusan & Tingkat
Saat user pilih Jurusan dan/atau Tingkat Kelas, dropdown
Kelas otomatis terfilter hanya menampilkan kelas yang cocok.
Menggunakan JS client-side dengan data options dari backend.
2026-07-24 18:59:05 +07:00
Bro 9be9b4d939 fix: urutan filter data siswa: Jurusan → Tingkat → Kelas
- Dropdown diurutkan: Jurusan, Tingkat Kelas, Kelas
- Jurusan di-sort by department_name (alfabetis)
- Hapus kode jurusan dari option (cukup nama)
2026-07-24 18:56:50 +07:00
Bro 798c8c3baf fix: tombol Simpan setelah ganti token Kesiswaan 2026-07-24 18:54:01 +07:00
Bro c35c41f7ee fix: tambah tombol Ganti untuk token Kesiswaan 2026-07-24 18:52:48 +07:00
Bro 0e2c9fc7ea fix: tampilkan token Kesiswaan + test koneksi
- Token Database Kesiswaan ditampilkan sebagai text (bisa copy)
- Tambah tombol 'Test Koneksi' yang ping endpoint
  /api/integration/students dan tampilkan status
- Status indikator: abu=belum, hijau=terhubung, merah=gagal
2026-07-24 18:47:08 +07:00
Bro 30c6927658 fix: flatpickr lebih lebar 370px + day height 42px 2026-07-24 18:28:38 +07:00
Bro 2492b5ea28 fix: custom Flatpickr modern — glass border, gradient selected, scale hover
- Ganti tema Airbnb dengan CSS kustom total
- Glassmorphism: background putih transparan, blur, shadow 3D
- Selected day: gradient blue 135deg + shadow glow
- Hover: scale 105% + background slate
- Border radius 16px, ukuran 300px
- Font lebih modern, spacing lebih lapang
- Transisi mulus 120ms
2026-07-24 18:27:30 +07:00
Bro cd69638199 feat: flatpickr date picker premium di semua input tanggal
- Flatpickr (CDN) dengan tema Airbnb — bersih & modern
- Lokalisasi Bahasa Indonesia
- altInput: tampil dd/mm/yyyy, simpan yyyy-mm-dd
- Animasi mulus + shadow premium
- Berlaku otomatis ke semua <input type='date'> di seluruh app
- Style kustom: border-radius 12px, shadow 3D
2026-07-24 18:25:43 +07:00
Bro 4784a0d357 fix: alignment tombol Lanjutkan
Sebelum: pakai items-end — tombol turun karena
kolom pertama ada legend ekstra.
Sesudah: padding-top manual agar lurus dengan input.
2026-07-24 18:21:25 +07:00
Bro 3287268ff1 feat: UI premium halaman Input Presensi
- Filter card: gradient putih-abu, hover shadow, icon di label
- Tombol Lanjutkan: gradient blue, shadow lebih dalam
- Info bar: gradient with icon box + badge kelas biru
- Tabel: sticky student column dengan avatar rounded-xl
  gradient hover di baris & hover avatar berubah warna
- Tombol status: ukuran naik w-10 h-10 rounded-xl
  border lebih tebal, hover scale 110%, active scale 95%
- Bulk set: compact bg box, tombol hover scale
- Bottom: card terpisah untuk legend + submit
  dengan gradient putih-abu border
- Info box: gradient emerald-teal dengan icon box shadow
- Ukuran font konsisten, spacing lebih lapang
2026-07-24 18:18:41 +07:00
Bro f393f79ec0 feat: UI premium polish
- Sidebar: gradient blue tint background + subtle shadow
- Sidebar nav: active indicator gradient, border-left glow
- Halaman: fade-in animation tiap navigasi
- Stat cards: hover lift + shadow glow (stat-card-glow)
- Transisi halus di semua elemen interaktif
2026-07-24 18:15:25 +07:00
Bro 5df740fcf8 feat: status presensi per kelas di dropdown input
Dropdown kelas sekarang menampilkan:
- ⬜ Nama Kelas → belum ada data presensi
- ✅ Nama Kelas (5/36) → sudah terisi (X siswa terdata dari total)
- Legend kecil di bawah dropdown sebagai panduan
2026-07-24 18:12:39 +07:00
Bro 129d3456a9 fix: style kalender kembali ke grid bersih, tetap klikable
Style balik ke versi awal (putih, border tipis, badge pojok),
tapi seluruh kotak bisa diklik (pake <a> tag).
Legend diperbarui.
2026-07-24 18:09:50 +07:00
Bro e4e0b234f6 feat: kalender presensi full-kotak warna + klik
Sebelum: badge kecil merah/hijau di pojok, susah diklik.
Sesudah: seluruh kotak tanggal berwarna (merah=ada alpha,
hijau=semua hadir), bisa diklik langsung untuk input presensi.
- Info jumlah siswa & alpha di dalam kotak
- Legend yang lebih jelas
2026-07-24 18:07:58 +07:00
Bro f0d337a3eb fix: tampilkan 'E-Jurnal (Sinkron Otomatis)' di Dicatat Oleh
Jika violation dari sync E-Jurnal (recorded_by=null),
sekarang tampilkan ikon sync + label E-Jurnal,
bukan '?' atau '-' seperti sebelumnya.
2026-07-24 18:05:29 +07:00
Bro 5206e2396b feat: reset presensi (attendances) di menu Reset
Menambahkan opsi 'Presensi' pada form reset aplikasi:
- Hapus seluruh data attendances (dari sync E-Jurnal & manual)
- Tampilkan jumlah data presensi di card
- Dapat dipilih terpisah dari pelanggaran
2026-07-24 17:41:20 +07:00
Bro a1dfd75d7d feat: API penerima push presensi dari e-jurnal
- AttendanceSyncController: POST /api/v1/attendance/sync
  Token auth, upsert per (student_id, date, lesson_hour)
- Ping endpoint: GET /api/v1/attendance/ping?token=
- CSRF exclusion for api/* routes
- Settings: generate/regenerate E-Jurnal token + copy
- Menu Sinkron: form input token E-Jurnal
2026-07-24 12:54:09 +07:00
Novy San87 fb5e349ae6 feat: add Open Graph meta tags for social preview 2026-07-23 11:59:12 +07:00
Novy San87 9e1b5c34e5 feat: rekap presensi harian, mingguan, bulanan + export excel
- Add 3 jenis rekap presensi (harian/mingguan/bulanan) per kelas
- Weekly recap: tabel H,S,I,A per hari + kolom TOTAL
- Alpha proporsional: A = jam_alpha / total_jam
- Pemisah border antar hari dan kolom TOTAL
- Export Excel rekap mingguan (.xlsx)
- Fix max_input_vars PHP limit (1000→5000)
- Fix Carbon date object issue di groupBy
2026-07-23 11:11:28 +07:00
Novy San87 9c741f13f7 feat: dynamic role-based permission system
- Add permissions & role_permissions tables with migration
- Add PermissionMiddleware for route-level access control
- Add CheckRole middleware for role-based fallback
- Add PermissionController with UI (Settings > Hak Akses Role)
- Add @canPermission Blade directive for view-level checks
- Convert all routes to use dynamic permission middleware
- Add canPermission() method to User model
- All access rights configurable via admin UI
2026-07-23 06:49:28 +07:00
Bro 5eb3830895 feat: replace attendance history list with interactive calendar
- Calendar shows per-date student count badge (green=all hadir, red=ada alpha)
- Click badge to go to attendance input for that date
- Prev/next month navigation with API fetch
- Controller passes initial month data inline (no flash on load)
2026-07-23 00:00:21 +07:00
Bro e4fef817b0 fix: attendance stats count based on unique students, not records per lesson-hour 2026-07-22 23:56:57 +07:00