Skip to content

ikhsan3adi/absensi-sekolah-qr-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

481 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Aplikasi Web Sistem Absensi Sekolah Berbasis QR Code
(+ Dukungan RFID)

ikhsan3adi%2Fabsensi-sekolah-qr-code | Trendshift
Continuous Integration GitHub Repo stars GitHub Contributors GitHub forks GitHub watchers

Preview

Aplikasi Web Sistem Absensi Sekolah adalah sebuah proyek yang bertujuan untuk mengotomatisasi proses absensi di lingkungan sekolah. Aplikasi ini dikembangkan dengan menggunakan framework CodeIgniter 4 dan didesain untuk mempermudah pengelolaan dan pencatatan kehadiran siswa dan guru.

Instalasi & Cara Penggunaan

Fitur Utama

  • QR Code scanner. Setiap siswa/guru menunjukkan qr code kepada perangkat yang dilengkapi dengan kamera. Aplikasi akan memvalidasi QR code dan mencatat kehadiran siswa ke dalam database.
  • RFID Integration. Dukungan presensi menggunakan RFID card sebagai alternatif QR Code. Setiap siswa/guru dapat menggunakan RFID card untuk melakukan presensi dengan validasi kode RFID yang unik.
  • Notifikasi Presensi via WhatsApp. Setelah berhasil scan dan presensi, pemberitahuan dikirim ke nomor hp siswa melalui whatsapp.
  • Login petugas.
  • Dashboard petugas. Petugas sekolah dapat dengan mudah memantau kehadiran siswa dalam periode waktu tertentu melalui tampilan yang disediakan.
  • Dashboard Wali Kelas. Fitur khusus untuk guru wali kelas dengan kemampuan:
    • Memantau kehadiran siswa di kelas yang diampu
    • Mengelola data kehadiran siswa per kelas
    • Generate QR code untuk siswa di kelasnya
    • Generate laporan kehadiran khusus untuk kelas yang diampu
  • QR Code generator & downloader. Petugas yang sudah login akan men-generate dan/atau mendownload qr code setiap siswa/guru. Setiap siswa akan diberikan QR code unik yang terkait dengan identitas siswa. QR code ini akan digunakan saat proses absensi.
  • Ubah data absen siswa/guru. Petugas dapat mengubah data absensi setiap siswa/guru. Misalnya mengubah data kehadiran dari tanpa keterangan menjadi sakit atau izin.
  • Tambah, Ubah, Hapus(CRUD) data siswa/guru.
  • Tambah, Ubah, Hapus(CRUD) data kelas.
  • Lihat, Tambah, Ubah, Hapus(CRUD) data petugas. (khusus petugas yang login sebagai superadmin).
  • Generate Laporan. Generate laporan dalam bentuk pdf.
  • Import Data. Import data secara massal menggunakan file CSV:
    • Import data siswa dalam jumlah banyak
    • Import data guru
    • Import data kelas
    • Import data jurusan
  • Backup & Restore. Backup dan restore database serta file foto/QR code.
  • Pengajuan Izin/Sakit Digital. Siswa/guru dapat mengajukan izin ketidakhadiran secara mandiri melalui halaman publik (/izin). Pengajuan akan direview oleh admin/wali kelas dan jika disetujui, sistem otomatis mengisi presensi siswa/guru dengan status Sakit/Izin sesuai rentang tanggal.
  • Cek Kehadiran Mandiri. Portal publik (/cek-kehadiran) untuk mengecek riwayat kehadiran siswa tanpa perlu login.
  • Sistem Poin Keterlambatan. Sistem otomatis menghitung menit keterlambatan berdasarkan batas jam masuk dan mengakumulasikan poin pelanggaran ke profil siswa. Menampilkan top 5 siswa terlambat di dashboard.
  • Manajemen Hari Libur. Admin dapat menandai hari libur (tanggal tunggal atau rentang). Fitur auto-generator untuk menandai seluruh weekend dalam satu bulan. Sistem scanner menolak presensi pada tanggal libur.
  • Pembedaan Status "Belum Scan" vs "Alfa". Sistem membedakan siswa yang belum datang (Belum Scan) dengan yang bolos (Alfa). Status Alfa baru diberikan setelah melewati batas jam pulang.
  • Peringatan Ketidakhadiran Beruntun. Dashboard menampilkan siswa yang tidak hadir 3+ hari berturut-turut tanpa keterangan untuk deteksi dini.
  • Live Monitoring. Dashboard admin dan wali kelas menampilkan data real-time dengan polling periodik.
  • Audit Log. Sistem mencatat semua aktivitas CRUD (siapa, apa, kapan, nilai lama dan baru) untuk keperluan audit dan troubleshooting.

  • Fonnte - WhatsApp API untuk mengirim pesan notifikasi

Pratinjau

Tampilan aktual bisa saja telah mengalami perubahan

Sistem Presensi

RFID Scanner
(NEW) QR Code + RFID
Hasil Scan Absensi
Hasil Presensi Masuk/Pulang (OLD)
Notifikasi WA
Notifikasi otomatis dikirim ke nomor HP siswa/guru setelah berhasil presensi.

Dashboard Admin

Dashboard Admin
Dashboard Utama
Absen Siswa
Absensi Siswa
Absen Guru
Absensi Guru
Generate Laporan
Generate Laporan
CRUD Data Siswa
Data Siswa
CRUD Data Guru
Data Guru
Generate QR
Generate QR Code
Data Kelas & Jurusan
Data kelas, jurusan, dan penugasan Wali Kelas.
Backup & Restore
Backup & Restore
Ubah Data Kehadiran
Edit Status Kehadiran
Login Petugas
Login Petugas
Pengaturan
Pengaturan

Dashboard Wali Kelas

Dashboard Wali Kelas Manajemen Kehadiran Kelas
Dashboard khusus untuk guru wali kelas dengan statistik kehadiran siswa di kelasnya. Wali kelas dapat melihat dan mengelola kehadiran siswa di kelas yang diampu.

Donasi ❤

Klik link dibawah untuk mendukung pengembangan

Donate trakteer Donate saweria


Cara Penggunaan

Persyaratan

  • Composer.
  • PHP 8.1+ dan MySQL/MariaDB atau XAMPP versi 8.1+ dengan mengaktifkan extension intl dan gd.
  • Pastikan perangkat memiliki kamera/webcam untuk menjalankan qr scanner. Bisa juga menggunakan kamera HP dengan bantuan software DroidCam.

Instalasi

1. Clone/Download Repository

git clone https://github.com/ikhsan3adi/absensi-sekolah-qr-code.git
cd absensi-sekolah-qr-code

2. Install Dependencies

Install semua dependencies menggunakan Composer:

composer install

3. Konfigurasi Environment

  • Jika belum ada file .env, copy dari .env.example:

    cp .env.example .env
  • Edit file .env dan sesuaikan konfigurasi database:

    database.default.hostname = localhost
    database.default.database = db_absensi
    database.default.username = root
    database.default.password =
    database.default.DBDriver = MySQLi

4. Buat Database

Buat database baru di MySQL/MariaDB:

CREATE DATABASE db_absensi;

5. Jalankan Migration

Migration akan membuat semua struktur tabel yang diperlukan:

php spark migrate --all

Tabel yang akan dibuat:

  • tb_jurusan - Master jurusan
  • tb_kelas - Data kelas
  • tb_kehadiran - Master status kehadiran
  • tb_guru - Data guru
  • tb_siswa - Data siswa
  • tb_presensi_guru - Presensi guru
  • tb_presensi_siswa - Presensi siswa
  • tb_perizinan - Pengajuan izin/sakit digital
  • tb_hari_libur - Manajemen hari libur
  • audit_logs - Log aktivitas sistem
  • users - Akun pengguna
  • auth_identities - Identitas autentikasi (email, password hash)
  • auth_groups_users - Groups pengguna (role)
  • general_settings - Pengaturan aplikasi

6. Jalankan Seeder

Seeder akan mengisi data awal yang diperlukan:

php spark db:seed DatabaseSeeder

Data yang akan di-seed:

  • Status kehadiran: Hadir, Sakit, Izin, Tanpa keterangan
  • Jurusan: OTKP, BDP, AKL, RPL
  • Kelas awal: X, XI, XII untuk semua jurusan
  • Akun superadmin default
  • Pengaturan umum aplikasi

7. Jalankan Aplikasi

Menggunakan PHP Built-in Server:

php spark serve

Aplikasi akan berjalan di http://localhost:8080

Atau menggunakan XAMPP/Apache:

  • Pastikan Apache dan MySQL sudah running
  • Akses aplikasi melalui browser

8. Login

Login menggunakan kredensial superadmin default:

Username: superadmin
Password: superadmin
Email: adminsuper@gmail.com

Caution

Segera ubah password default setelah login pertama kali!

9. Setup Tambahan

  • Izinkan akses kamera untuk fitur QR Scanner
  • Untuk RFID: Hubungkan RFID reader USB ke komputer
  • Untuk notifikasi WhatsApp: Lihat bagian Konfigurasi di bawah

Akses Publik (Tanpa Login):

Halaman berikut dapat diakses tanpa autentikasi:

  • /izin - Form pengajuan izin/sakit untuk siswa
  • /cek-kehadiran - Portal cek kehadiran siswa

Untuk panduan lengkap tentang migration dan seeder, lihat MIGRATION_GUIDE.md

Daftar Groups & Permissions

Role pengguna dikelola menggunakan CodeIgniter Shield groups. Tiap user bisa memiliki lebih dari satu group.

Group Title Hak Akses
superadmin Super Admin Akses penuh semua fitur
admin Staf Petugas Kelola absensi, generate QR & laporan
kepsek Kepala Sekolah Melihat laporan absensi
scanner Scanner Hanya scan QR Code
guru Guru / Wali Kelas Kelola presensi siswanya, review pengajuan izin

User dengan group guru secara otomatis mendapatkan akses ke dashboard wali kelas. Untuk menjadi wali kelas, guru harus ditugaskan ke kelas melalui fitur "Edit Kelas" di menu admin.

Cara Menggunakan Akun Wali Kelas

Fitur Wali Kelas memungkinkan guru untuk mengelola kehadiran siswa di kelas yang diampu. Berikut cara mengaktifkan dan menggunakan fitur ini:

Persiapan Data

Pastikan data berikut sudah tersedia:

  • Data Guru sudah terdaftar di sistem
  • Data Kelas sudah dibuat

Menautkan Guru sebagai Wali Kelas

  1. Login sebagai admin/superadmin
  2. Buka menu Kelas & JurusanData Kelas
  3. Klik tombol Edit pada kelas yang akan ditugaskan wali kelas
  4. Pada dropdown "Wali Kelas", pilih nama guru yang akan menjadi wali kelas
  5. Klik Simpan

Menautkan Wali Kelas ke Akun Petugas

  1. Login sebagai superadmin
  2. Buka menu Data Petugas
  3. Untuk membuat akun baru:
    • Klik Tambah Petugas
    • Isi data: Email, Username, Password
    • Pilih Role: Admin (bukan Superadmin)
    • Pada dropdown "Hubungkan ke Guru", pilih nama guru
    • Klik Simpan
  4. Untuk mengedit akun yang sudah ada:
    • Klik Edit pada akun petugas
    • Pada dropdown "Hubungkan ke Guru", pilih nama guru
    • Klik Update

Login sebagai Wali Kelas

  1. Logout dari akun superadmin
  2. Login menggunakan username dan password yang sudah dibuat/dihubungkan ke data guru
  3. Setelah login, sistem akan otomatis mendeteksi bahwa akun tersebut terhubung dengan data guru yang menjadi wali kelas
  4. Dashboard Wali Kelas akan muncul dengan data kelas yang diampu

Fitur Dashboard Wali Kelas

Setelah login sebagai wali kelas, Anda dapat:

  • Melihat Statistik Kehadiran: Grafik dan data kehadiran siswa di kelas yang diampu, termasuk data real-time
  • Mengelola Kehadiran Siswa: Lihat detail kehadiran setiap siswa per tanggal
  • Review Pengajuan Izin: Menyetujui atau menolak pengajuan izin/sakit dari siswa di kelas yang diampu melalui menu Pengajuan Izin
  • Peringatan Ketidakhadiran: Melihat siswa yang tidak hadir 3+ hari berturut-turut tanpa keterangan
  • Generate QR Code: Download QR Code untuk siswa di kelas yang diampu
  • Generate Laporan: Buat laporan kehadiran khusus untuk kelas yang diampu dalam format PDF

Catatan Penting

  • Satu akun petugas hanya bisa dihubungkan ke satu data guru
  • Guru yang belum ditugaskan sebagai wali kelas tidak akan melihat menu Dashboard Wali Kelas
  • Wali kelas hanya dapat melihat dan mengelola data siswa di kelasnya sendiri
  • Akun superadmin memiliki akses penuh ke semua fitur, termasuk fitur wali kelas

Import Data dari CSV

Aplikasi mendukung import data secara massal menggunakan file CSV:

  • Import Data Siswa - Buka menu Data Siswa > Import CSV. Download template csv_guru_template.csv dan upload setelah diisi. Contoh csv_siswa_example.csv

    Pastikan id kelas cocok dengan data kelas yang ada di database

  • Import Data Guru - Buka menu Data Guru > Import CSV. Download template csv_guru_template.csv dan upload setelah diisi.

    Perhatikan untuk impor data guru & siswa:

    ...,jenis_kelamin,... <- kolom
    ...,Laki-laki,...     # contoh nilai valid
    ...,Perempuan,...     # pastikan sama persis

    Sistem otomatis menormalisasi variasi input jenis kelamin. Nilai seperti L, P, laki-laki, laki, perempuan, cewe akan dikenali dan dikonversi ke nilai database yang benar.

  • Import Data Jurusan dan Kelas - Buka menu Kelas & Jurusan > Jurusan > Import (Jurusan/Kelas). Download template csv_jurusan_template.csv atau csv_kelas_template.csv dan upload setelah diisi.

    Penting untuk memastikan kolom jurusan pada csv kelas harus SUDAH ADA dan $PERSIS \space SAMA$ dengan yang ada di database jurusan.

    Direkomendasikan untuk impor jurusan dahulu lalu impor kelas

Catatan: Gunakan encoding UTF-8 dan delimiter koma (,). Sistem akan mengabaikan data duplikat.

Konfigurasi

Important

  • Konfigurasi file .env untuk mengatur base url(terutama jika melakukan hosting), koneksi database dan pengaturan lainnya sesuai dengan lingkungan pengembangan Anda.

  • Untuk mengaktifkan notifikasi WhatsApp, pertama-tama ubah variabel .env berikut dari false menjadi true.

    # .env
    # WA_NOTIFICATION=false # sebelum
    WA_NOTIFICATION=true

    Lalu masukkan token WhatsApp API.

    # .env
    WA_NOTIFICATION=true
    WHATSAPP_PROVIDER=Fonnte
    WHATSAPP_TOKEN=XXXXXXXXXXXXXXXXX # ganti dengan token anda

    Untuk mendapatkan token, daftar di website fonnte terlebih dahulu. Lalu daftarkan device anda dan dapatkan token Fonnte Whatsapp API

  • Untuk mengubah konfigurasi nama sekolah, tahun ajaran logo sekolah dll sudah disediakan pengaturan (khusus untuk superadmin).

  • Logo Sekolah Rekomendasi 100x100px atau 1:1 dan berformat PNG/JPG.

  • Jika ingin mengubah email, username & password dari superadmin, sebelum melakukan seed database, buka file app\Database\Migrations\2023-08-18-000004_AddSuperadmin.php lalu ubah & sesuaikan kode berikut:

    // INSERT INITIAL SUPERADMIN
    $email = 'adminsuper@gmail.com';
    $username = 'superadmin';
    $password = 'superadmin';

Docker Setup (Opsional)

Untuk menjalankan aplikasi menggunakan Docker, pastikan Docker dan Docker Compose sudah terinstal di komputer Anda.

1. Jalankan Container

Jalankan perintah berikut di root project:

docker-compose up -d --build

Perintah ini akan membangun image dan menjalankan container untuk aplikasi web, database, dan phpMyAdmin.

2. Akses Aplikasi

  • Aplikasi Utama: Akses melalui browser di http://localhost:8080/
  • phpMyAdmin: Akses melalui browser di http://localhost:8081/

3. Konfigurasi

Aplikasi sudah dikonfigurasi untuk terhubung dengan database container secara otomatis.

4. Menghentikan Container

Untuk menghentikan container:

docker-compose down

Kesimpulan

Dengan aplikasi web sistem absensi sekolah berbasis QR code ini, diharapkan proses absensi di sekolah menjadi lebih efisien dan terotomatisasi. Proyek ini dapat diadaptasi dan dikembangkan lebih lanjut sesuai dengan kebutuhan dan persyaratan sekolah Anda.

Jangan lupa beri star 👍

Contributing

Kami menerima kontribusi dari komunitas terbuka untuk meningkatkan aplikasi ini. Jika Anda menemukan masalah, bug, atau memiliki saran untuk peningkatan, silakan buat issue baru dalam repositori ini atau ajukan pull request.

Star History

Star History Chart

Kontributor

About

Sistem absensi sekolah berbasis QR Code/RFID dengan multi-role, notifikasi WhatsApp, serta dashboard terpisah untuk wali kelas dan admin.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors

Languages