Sistem absensi berbasis web dengan QR Code untuk PT. Mada Wikri Tunggal. Aplikasi ini memungkinkan pengelolaan data karyawan, pengiriman undangan email dengan QR Code embedded, dan sistem absensi yang efisien.
- Manajemen Departemen - Kelola data departemen perusahaan
- Manajemen Plant - Kelola data plant/lokasi perusahaan
- Manajemen Karyawan - CRUD lengkap untuk data karyawan
- Import data karyawan dari Excel/CSV
- Template import tersedia
- Validasi data otomatis
- Manajemen Pengguna - Kelola akun admin
- Manajemen Absen - Lihat dan kelola data absensi
- Kirim Undangan Email - Kirim undangan seminar ke karyawan
- QR Code Embedded - QR Code langsung muncul di body email (bukan cuma attachment)
- Background Processing - Email dikirim menggunakan Laravel Queue (non-blocking)
- Mobile Responsive Email - Email template yang rapi di desktop dan mobile
- Batch & Individual Send - Kirim email ke semua karyawan atau satu per satu
- QR Code Scanning - Absensi menggunakan QR Code yang dikirim via email
- NIK Input - Alternatif input NIK jika QR Code tidak bisa di-scan
- Sound Feedback - Audio feedback saat absensi berhasil/gagal
- Real-time Validation - Validasi absensi real-time
- Dashboard - Overview data dan statistik
- Modern UI - Interface yang modern dan user-friendly
- Responsive Design - Bisa diakses dari desktop dan mobile
- Framework: Laravel 12.x
- PHP: 8.2+
- Database: SQLite (default) / MySQL / PostgreSQL
- QR Code:
endroid/qr-code(v5.0)simplesoftwareio/simple-qrcode(v4.2)
- Excel Import:
phpoffice/phpspreadsheet - Email: Laravel Mailer dengan Queue
- Queue: Laravel Queue (Database Driver)
- PHP >= 8.2
- Composer
- SQLite (default) atau MySQL/PostgreSQL
- Extension PHP:
ext-zip(untuk PhpSpreadsheet)ext-mbstringext-opensslext-pdoext-tokenizer
git clone https://github.com/ardyansyahp/etiket.git
cd etiketcomposer install# Copy .env.example ke .env
cp .env.example .env
# Generate application key
php artisan key:generateEdit file .env dan sesuaikan konfigurasi database:
DB_CONNECTION=sqlite
# atau untuk MySQL
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=etiket
# DB_USERNAME=root
# DB_PASSWORD=php artisan migratephp artisan storage:linkEdit file .env untuk mengatur email SMTP:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@gmail.com
MAIL_FROM_NAME="${APP_NAME}"Catatan untuk Gmail:
- Gunakan App Password, bukan password biasa
- Aktifkan 2-Step Verification terlebih dahulu
- Generate App Password di: https://myaccount.google.com/apppasswords
Queue sudah dikonfigurasi untuk menggunakan database driver. Pastikan tabel jobs sudah dibuat:
php artisan migratephp artisan serveAplikasi akan berjalan di http://localhost:8000
- Akses:
http://localhost:8000/admin/login - Login menggunakan kredensial admin yang sudah dibuat
- Buka menu Karyawan
- Klik Tambah Karyawan
- Isi form data karyawan
- Pastikan email sudah diisi (untuk kirim undangan)
- Buka menu Karyawan
- Klik Download Template untuk mendapatkan template
- Isi template dengan data karyawan
- Klik Import Excel dan pilih file
- Sistem akan validasi dan import data otomatis
Format Template:
- File:
.xlsx,.xls, atau.csv - Header:
nik,nama_lengkap,email,no_telp,tanggal_masuk, dll - Encoding: UTF-8
- Buka menu Karyawan
- Klik tombol π§ Kirim Undangan ke Semua
- Email akan masuk ke queue dan dikirim di background
- Buka menu Karyawan
- Klik tombol π§ pada baris karyawan yang ingin dikirim email
- Email akan masuk ke queue dan dikirim di background
PENTING: Queue worker harus berjalan untuk memproses email!
# Windows
php artisan queue:work
# Atau gunakan batch file
run-queue.bat
# Linux/Mac
php artisan queue:workUntuk Production: Gunakan Supervisor atau systemd untuk auto-restart queue worker:
# Supervisor example
[program:etiket-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/etiket/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/etiket/storage/logs/queue.log- Akses:
http://localhost:8000 - Karyawan bisa scan QR Code atau input NIK
- Sistem akan validasi dan mencatat absensi
etiket/
βββ app/
β βββ Http/
β β βββ Controllers/
β β β βββ AbsenController.php # Controller untuk absensi
β β β βββ AdminController.php # Controller untuk admin panel
β β βββ Middleware/
β βββ Mail/
β β βββ UndanganAbsen.php # Mailable class untuk email undangan
β βββ Models/
β βββ Absen.php
β βββ Departemen.php
β βββ Karyawan.php
β βββ Pengguna.php
β βββ Plant.php
βββ database/
β βββ migrations/ # Database migrations
β βββ seeders/
βββ public/
β βββ css/ # CSS files
β βββ images/ # Images & favicon
β βββ js/ # JavaScript files
β βββ sound/ # Audio files untuk feedback
βββ resources/
β βββ views/
β βββ admin/ # Views untuk admin panel
β βββ absen/ # Views untuk absensi
β βββ emails/
β βββ undangan_absen.blade.php # Email template
βββ routes/
β βββ web.php # Web routes
βββ config/
β βββ mail.php # Mail configuration
β βββ queue.php # Queue configuration
βββ run-queue.bat # Helper script untuk queue worker
-
Cek Queue Worker
- Pastikan queue worker sedang berjalan
- Cek log:
storage/logs/laravel.log
-
Cek Konfigurasi Email
- Pastikan SMTP setting benar di
.env - Untuk Gmail, gunakan App Password
- Pastikan SMTP setting benar di
-
Cek Failed Jobs
php artisan queue:failed
- Pastikan menggunakan CID embedding (bukan base64)
- Beberapa email client mungkin memblokir inline images
- QR Code tetap dilampirkan sebagai attachment untuk backup
-
Cek Extension PHP
php -m | grep zipJika tidak ada, aktifkan di
php.ini:extension=zip -
Cek Format File
- Pastikan file adalah
.xlsx,.xls, atau.csv - Pastikan encoding UTF-8
- Pastikan header sesuai template
- Pastikan file adalah
-
Cek Log
tail -f storage/logs/laravel.log
-
Cek Database
php artisan migrate
-
Cek Permission
- Pastikan folder
storage/danbootstrap/cache/writable
- Pastikan folder
-
Restart Queue Worker
php artisan queue:restart php artisan queue:work
- Email Queue: Email menggunakan Laravel Queue untuk background processing. Queue worker harus selalu berjalan.
- QR Code: QR Code di-generate dari NIK karyawan dan di-embed langsung di body email menggunakan CID (Content-ID).
- Mobile Responsive: Email template sudah dioptimalkan untuk mobile dengan media query.
- Database: Default menggunakan SQLite, bisa diubah ke MySQL/PostgreSQL di
.env.
Ardyansyah Putra
- Email: ardyansyahputra174@gmail.com
- GitHub: @ardyansyahp
MIT License - lihat file LICENSE untuk detail lengkap.
- Laravel Framework
- Endroid QR Code Library
- PhpSpreadsheet
- PT. Mada Wikri Tunggal
Dibuat dengan β€οΈ untuk PT. Mada Wikri Tunggal