Aplikasi kehadiran KTM ambil peti undi (SPR 2026)

Sistem untuk admin DUN merekod waktu KTM (Ketua Tempat Mengundi) hadir
mengambil peti undi. Data KTM dibaca daripada DB sppm (spr2026) melalui
connection kedua — hanya penempatan berjawatan KTM yang dipaparkan.

- Dashboard: senarai KTM ikut pusat mengundi (asc) & saluran (asc),
  status BELUM HADIR (merah) / HADIR (hijau) + tarikh & masa
- Carian nama/no. KP, tapisan pusat mengundi & status
- Tanda hadir / batal dengan kawalan DUN (admin terhad ke DUN sendiri)
- Eksport Excel (worksheet Hadir & Belum Hadir) guna SimpleXlsx
- Peranan: superadmin (urus pengguna, semua DUN) & admin DUN
- Docker: nginx + php-fpm + queue + scheduler + webhook deploy,
  port 127.0.0.1:8009, TZ Asia/Kuala_Lumpur di semua container
- Zon waktu aplikasi: Asia/Kuala_Lumpur (APP_TIMEZONE)

Berasaskan scaffold spr2026_taklimat.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Saufi
2026-07-11 02:40:00 +08:00
commit dfd22ff2af
95 changed files with 14681 additions and 0 deletions

51
.env.docker.example Normal file
View File

@@ -0,0 +1,51 @@
# Salin ke .env.docker dan isi nilai sebenar sebelum `docker compose up`.
# Fail .env.docker TIDAK dikommit (lihat .gitignore).
APP_NAME="Kehadiran KTM SPR 2026"
APP_ENV=production
APP_KEY= # jana: php artisan key:generate --show
APP_DEBUG=false
APP_URL=https://ktmspr.apps.mbip.my
APP_TIMEZONE=Asia/Kuala_Lumpur
APP_LOCALE=ms
APP_FALLBACK_LOCALE=en
BCRYPT_ROUNDS=12
LOG_CHANNEL=stack
LOG_STACK=single
LOG_LEVEL=warning
# Pangkalan data aplikasi ini (users + kehadiran_ktm) — MySQL pada host
DB_CONNECTION=mysql
DB_HOST=host.docker.internal
DB_PORT=3306
DB_DATABASE=sppm_ktm
DB_USERNAME=ktm
DB_PASSWORD=CHANGE_ME
# Pangkalan data sistem pengurusan pusat mengundi (spr2026) — baca sahaja
SPPM_DB_HOST=host.docker.internal
SPPM_DB_PORT=3306
SPPM_DB_DATABASE=sppm
SPPM_DB_USERNAME=ktm
SPPM_DB_PASSWORD=CHANGE_ME
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
CACHE_STORE=database
MAIL_MAILER=log
MAIL_FROM_ADDRESS="ktmspr@apps.mbip.my"
MAIL_FROM_NAME="${APP_NAME}"
# Webhook deploy (GitHub push -> /hooks/deploy)
WEBHOOK_SECRET=CHANGE_ME