FO
FleetOffice Interactive System Handbook
πŸš€ Buka Aplikasi Utama
Modul Inti Operasional Kantor

Sistem Reservasi Kendaraan Kantor (FleetOffice)

Sistem informasi operasional kantor untuk mengelola permohonan, penugasan, dan pemantauan armada kendaraan dinas. Sistem ini memfasilitasi pengajuan langsung oleh pegawai, proses verifikasi dan penjadwalan oleh tim General Affairs (GA), pengiriman surat tugas pengemudi via WhatsApp, validasi gerbang oleh pos keamanan menggunakan tiket QR, serta pencatatan jarak tempuh kendaraan.

✍️ Pengajuan Cepat

Pegawai dapat mengajukan permohonan dinas dengan mengisi data nama dan kontak kantor tanpa kewajiban registrasi akun.

⚑ Mode Split-Trip

Mendukung pemisahan jadwal keberangkatan dan penjemputan dengan armada atau pengemudi yang berbeda.

πŸ›‘οΈ Validasi Tiket QR & KM

Pemeriksaan izin keluar-masuk oleh pos keamanan melalui pemindaian tiket QR serta pencatatan angka spidometer kendaraan.

Arsitektur Sistem

πŸ“ Struktur Direktori: Core Framework vs Modul Aplikasi Kustom

Dokumentasi pemetaan arsitektur direktori untuk memisahkan komponen inti engine framework Laravel dan modul logika bisnis yang dikembangkan khusus.

1. Folder app/ Jantung Logika

Folder utama tempat seluruh aturan bisnis dan alur kerja aplikasi berada.

Mesin Bawaan Laravel:
app/Http/Middleware/, app/Providers/
Khusus Buatan Kita:
  • app/Models/ : 6 Model bisnis (Reservation, Vehicle, Driver, TripAssignment, GateLog, Setting).
  • app/Http/Controllers/ : 10 Controller (Approval, GatePass, Plotting, Master Data, dll).
  • app/Services/ : FonnteService.php (WhatsApp Gateway API).
  • app/Mail/ : ReservationStatusMail & TripTicketMail.
2. Folder resources/views/ Antarmuka (UI)

Berisi seluruh halaman HTML/Blade dengan desain Tailwind CSS modern.

Subfolder Buatan Kita (Terisolasi per Role):
  • views/ga/ : Approval, Plotting, Master Mobil & Supir, Pengaturan SMTP/WA.
  • views/gate/ : Modul Pos Security (Scan QR kamera & Log gerbang).
  • views/reservations/ : Form pengajuan publik & pelacakan status.
  • views/dashboard/ : Visualisasi kalender mingguan armada.
  • views/layouts/ : Navbar header strictly-segregated per role.
  • views/qr/ : Tiket boarding pass digital untuk HP driver/pemohon.
3. Folder database/ MySQL & Data

Tempat mendefinisikan skema tabel MySQL dan data awal (seeder).

Bawaan Laravel:
users, cache, jobs migrations
Khusus Buatan Kita:
  • migrations/ : Migrasi 6 tabel bisnis (tb_vehicles, tb_drivers, tb_reservations, tb_trip_assignments, tb_gate_logs, tb_settings).
  • seeders/ : RoleAndUserSeeder & SampleReservationsSeeder.
4. Folder public/ & routes/ Web Root & Routing

Akses web publik browser dan pengatur alamat URL sistem.

File Penting:
  • public/panduan.php : Buku panduan interaktif visual ini.
  • public/qr/ : Folder penyimpan file barcode QR SVG tiket.
  • public/build/ : Bundel aset CSS & JS mandiri tanpa node_modules.
  • routes/web.php : Rute navigasi dengan proteksi RBAC.
⚠️
Peringatan untuk Folder storage/ dan vendor/:

Folder vendor/ berisi ribuan library pihak ketiga Composer (jangan pernah mengubah kode di dalamnya secara manual). Folder storage/ menyimpan data runtime seperti log error (storage/logs/laravel.log) dan cache aplikasi. Kedua folder ini wajib ada dan tidak boleh dihapus.

πŸ“Š Data Flow Diagram (DFD)

Alur pergerakan data dari karyawan, PIC GA, pos security, pimpinan, hingga notifikasi WhatsApp.

1. DFD Level 0 (Context Diagram)

flowchart LR A[πŸ‘€ Karyawan / Pemohon] -->|Form Pengajuan Dinas| S((Sistem FleetOffice)) S -->|Tiket QR Digital & Info Status| A B[⚑ PIC GA / HR] -->|Approval, Plotting Mobil/Supir, Master Data| S S -->|Daftar Permohonan & Audit Jarak| B C[πŸ›‘οΈ Pos Security] -->|Scan QR & Input Odometer KM| S S -->|Verifikasi Validitas Tiket| C S -->|Kalender Jadwal Mingguan| D[πŸ‘” Direksi / Management] S -->|API Trigger Pesan Notifikasi| E[πŸ“² Fonnte WhatsApp & SMTP]

2. DFD Level 1 (Siklus Proses Bisnis)

flowchart TD P1[1.0 Pengajuan Reservasi] -->|Status: Pending| DB1[(tb_reservations)] DB1 --> P2[2.0 Verifikasi GA] P2 -->|Approved / Rejected| DB1 P2 -.->|Notifikasi Status| WA[πŸ“² WhatsApp / Email] DB1 --> P3[3.0 Plotting Armada & Driver] DB2[(tb_vehicles)] --> P3 DB3[(tb_drivers)] --> P3 P3 -->|Generate Sesi & Token QR| DB4[(tb_trip_assignments)] P3 -.->|Kirim Tiket Digital| WA DB4 --> P4[4.0 Validasi Gerbang Security] P4 -->|Odometer Awal & Akhir| DB5[(tb_gate_logs)] DB5 --> P5[5.0 Audit Jarak Tempuh]

πŸ—ΊοΈ Entity Relationship Diagram (ERD)

Struktur relasi data antar tabel database MySQL/MariaDB (`vehicle_reservation`).

erDiagram tb_users ||--o{ tb_reservations : "mengajukan (opsional)" tb_reservations ||--|{ tb_trip_assignments : "memiliki 1 atau 2 sesi" tb_vehicles ||--o{ tb_trip_assignments : "mobil tugas" tb_drivers ||--o{ tb_trip_assignments : "supir tugas" tb_trip_assignments ||--o| tb_gate_logs : "catatan security" tb_reservations { bigint id PK bigint user_id FK string applicant_name string applicant_email string applicant_phone string destination string trip_mode string approval_status } tb_trip_assignments { bigint id PK bigint reservation_id FK bigint vehicle_id FK bigint driver_id FK string leg_type "antar atau jemput" string qr_token "Token Barcode" } tb_gate_logs { bigint id PK bigint trip_assignment_id FK int odometer_start "KM Keluar" int odometer_end "KM Masuk" }
Persistence Layer

πŸ—„οΈ Skema Tabel Database (MySQL / phpMyAdmin)

Database sistem tersimpan pada basis data MariaDB/MySQL Laragon dengan nama vehicle_reservation.

1. tb_reservations Pengajuan

Menyimpan pengajuan perjalanan dinas. Kolom `user_id` bernilai NULL jika diajukan tanpa login.

id, user_id, applicant_name, applicant_email, applicant_phone, destination, passengers, start_datetime, end_datetime, trip_mode, approval_status, rejection_note
2. tb_trip_assignments Plotting

Sesi penugasan mobil & supir. Jika Split-Trip, 1 reservasi memiliki 2 baris (antar & jemput).

id, reservation_id, vehicle_id, driver_id, leg_type, scheduled_time, qr_token, status
3. tb_gate_logs Security

Catatan riil waktu keluar/masuk pos gerbang beserta angka speedometer odometer (KM).

id, trip_assignment_id, odometer_start, checkout_time, odometer_end, checkin_time, notes
4. tb_vehicles & tb_drivers Master GA

Master armada mobil kantor (nomor plat, merk, status) & master supir beserta nomor WhatsApp.

tb_vehicles (plat_nomor, model, status)
tb_drivers (nama, no_hp, status)

πŸ›‘οΈ Matriks Hak Akses Peran (RBAC)

Navigasi header dan modul telah diisolasi secara ketat per peran agar tidak tumpang tindih.

Fitur / Halaman Publik / Tamu Karyawan (User) PIC GA Pos Security Management
Form Pengajuan Reservasi βœ… βœ… βœ… ❌ (Redirect) ❌
Pelacakan Status Mandiri βœ… βœ… βœ… ❌ ❌
Approval & Plotting Armada ❌ ❌ βœ… ❌ ❌
Master Mobil, Supir & Setting ❌ ❌ βœ… ❌ ❌
Scan Barcode Gate Pass & KM ❌ ❌ ❌ βœ… Eksklusif ❌
Jadwal Kalender Mingguan βœ… βœ… βœ… ❌ βœ… Read-Only

πŸ“ Standar Operasional Prosedur (SOP)

Tahapan operasional nyata dari hulu ke hilir.

1
Pengajuan oleh Karyawan (Tanpa Login) Buka form di halaman utama, masukkan nama, email kantor, no WhatsApp, tujuan, jam dinas, serta mode trip (Normal atau Split-Trip).
2
Verifikasi & Plotting oleh PIC GA GA memeriksa ketersediaan mobil dan supir. Jika disetujui, tentukan mobil dan supirnya. Sistem otomatis mengirimkan WhatsApp & Email ke pemohon serta supir bertugas berisi tiket QR.
3
Validasi Pos Security Gerbang (Checkout & Checkin) Saat mobil keluar, security memindai QR dan mencatat KM awal. Saat mobil kembali ke kantor, security memindai ulang dan mencatat KM akhir. Selisih KM otomatis terhitung.
4
Pemantauan & Audit oleh Management Pimpinan kantor dapat memantau jadwal armada di dashboard mingguan dan mengunduh berkas laporan rekapitulasi jarak tempuh dalam format CSV.
Manual Book β€’ Bab 2.1 Seluruh Petugas & Pegawai

πŸ” Panduan Akses Login, Tautan Server & Kredensial Akun Default

Alamat URL untuk mengakses antarmuka autentikasi sistem serta daftar akun default untuk demonstrasi dan inisialisasi awal.

πŸ’» Tautan Akses di Komputer Lokal (Laragon):
http://127.0.0.1:8000/login

Atau gunakan http://localhost:8000/login / http://vehicle-reservation.test/login saat server Laragon aktif.

🌐 Tautan Akses di Web Hosting / VPS (Production):
https://reservasi.namakantor.com/login

Sesuai domain atau subdomain instansi yang didaftarkan pada berkas .env (APP_URL).

πŸ–₯️ Tampilan Antarmuka Halaman Login (/login) Role-Based Access Control
https://reservasi.namakantor.com/login
Autentikasi Terproteksi
β‘‘
⚑ Quick Demo Access (1-Klik):
PIC GA ga@kantor.com
Pos Security security@kantor.com
Management management@kantor.com
Pegawai user@kantor.com

*Klik tombol demo di atas untuk mengisi form login secara instan.

β‘ 
Masuk ke Akun Anda
ga@kantor.com
β€’β€’β€’β€’β€’β€’β€’β€’

Daftar Akun Default Sistem (Inisialisasi Database Seeder):

Peran Akun (Role) Alamat Email Login Kata Sandi Default Hak Akses & Modul yang Terbuka
1. Administrator GA (PIC GA) ga@kantor.com password Akses penuh: Verifikasi Approval, Plotting Mobil/Supir, Master Mobil, Master Driver, Laporan Audit, User Management, dan Setting Gateway.
2. Pos Security Gerbang security@kantor.com password Otomatis langsung ke modul pemindaian Barcode Tiket QR Gate Pass, validasi fisik armada/driver, serta input angka Odometer (KM).
3. Pimpinan / Direksi (Management) management@kantor.com password Akses eksekutif: Memantau visualisasi Kalender Jadwal Mingguan seluruh armada dan mengunduh berkas Laporan Rekapitulasi Audit CSV / Excel.
4. Pegawai Internal (User Terdaftar) user@kantor.com password Mengajukan reservasi dengan form terisi otomatis dari profil, memantau riwayat dinas pribadi, dan membuka tiket QR digital.
⚠️ PENTING: Prosedur Keamanan Setelah Deployment di Hosting Produksi

Kata sandi bawaan password di atas hanya ditujukan untuk inisialisasi awal. Segera masuk ke akun GA -> buka menu Manajemen User (/ga/users) -> ubah kata sandi seluruh akun default menjadi kombinasi kata sandi yang kuat sebelum sistem digunakan oleh pegawai kantor.

Manual Book β€’ Bab 2.2 Untuk Karyawan / Pemohon Dinas

πŸ“– Panduan Karyawan: Mengisi Formulir Reservasi & Melacak Tiket

Petunjuk visual antarmuka pengajuan kendaraan dinas tanpa kewajiban login hingga memperoleh tiket QR.

πŸ–₯️ Tampilan Antarmuka: Formulir Pengajuan Reservasi (/reservations/create) Status Awal: Menunggu GA
http://127.0.0.1:8000/reservations/create
Formulir Bebas Hambatan
β‘ 
πŸ‘€ Data Diri Pemohon (Otomatis / Manual)
Nama: Budi Santoso
Email: budi@kantor.com
WhatsApp: 0812-3456-7890
β‘‘
πŸ‘₯ Peserta & Divisi
Contoh: Divisi IT & Keuangan (3 orang)
β‘’
πŸ“ Alamat Tujuan Dinas
Contoh: Gedung Kemenkeu RI, Jl. Lapangan Banteng
β‘£
⏰ Jadwal Waktu Operasional
πŸ›« Berangkat: 01 Sep 2026, 08:30 WIB
πŸ›¬ Selesai / Kembali: 01 Sep 2026, 17:00 WIB
β‘€
⚑ Pilihan Mode Perjalanan
πŸ”˜ Mode Normal (Standar) 1 mobil & supir stand-by menemani selama dinas.
πŸ”˜ Mode Split-Trip DIREKOMENDASIKAN
Sesi Drop-off (Antar) & Pick-up (Jemput) dipisah. Hemat armada!
β‘₯
Kirim Pengajuan Reservasi Kendaraan →

Penjelasan Elemen Formulir Pengajuan:

β‘  Data Diri Pemohon

Karyawan tamu tidak wajib login. Cukup isi Nama, Email Kantor, dan No WhatsApp. Pastikan email dan WhatsApp aktif karena tautan tiket QR akan dikirimkan otomatis ke kontak tersebut.

β‘‘ Peserta & Divisi Rombongan

Tuliskan divisi dan nama-nama staf yang ikut serta beserta jumlah orangnya (misal: "Divisi Keuangan - 3 Orang") agar GA dapat memilih mobil dengan kapasitas kursi yang mencukupi.

β‘’ Alamat Lengkap Destinasi

Cantumkan nama gedung, instansi, atau alamat lengkap agar supir dapat merencanakan rute tercepat dan estimasi waktu tempuh secara presisi.

β‘£ Jadwal Waktu Keberangkatan & Pulang

Pilih tanggal dan jam keberangkatan serta estimasi jam kepulangan. Jadwal ini akan langsung dikunci di kalender armada untuk mencegah tabrakan jam pemakaian.

β‘€ Pemilihan Mode: Normal vs Split-Trip

Gunakan Mode Split-Trip jika Anda hanya butuh diantar ke lokasi rapat dan dijemput kembali sore harinya. Mobil tidak perlu menunggu seharian di tempat parkir dan dapat dipakai dinas lain.

β‘₯ Konfirmasi & Pengiriman

Klik tombol kirim. Sistem akan menerbitkan ID Reservasi dan menampilkan halaman pelacakan status secara langsung (*Live Tracking*).

πŸ“± Tampilan Tiket Digital & Barcode QR (/qr/TRIP-TOKEN) Siap Scan di Pos Gerbang
FLEETOFFICE DIGITAL GATE PASS
β‘ 
QR CODE
TOKEN: TRIP-7X9A2-15
β‘‘
πŸš— Toyota Innova Reborn (B 1234 KAA)
πŸ‘€ Driver: Pak Supriyadi (0812-3456-7890)
⏰ Jadwal Tugas: 01 Sep 2026, 08:30 WIB

*Tunjukkan layar ini kepada petugas pos security saat checkout keluar kantor dan saat checkin kembali.

Manual Book β€’ Bab 2.2 Untuk Seluruh Pegawai

πŸ“– Panduan Membaca Kalender Jadwal Mingguan (/dashboard)

Cara membaca matriks jadwal dinas armada agar tidak terjadi bentrok agenda kantor.

http://127.0.0.1:8000/dashboard (Jadwal Mingguan)
● Live Update
β‘  Periode: 01 Sep 2026 - 07 Sep 2026
← Minggu Lalu Minggu Ini Minggu Depan →
Senin, 01 Sep
Sesi Antar
Innova (B 1234 KAA)
08:30 - Kemenkeu RI
Sesi Jemput
Avanza (B 5678 DEF)
16:30 - Kemenkeu RI
Selasa, 02 Sep
Normal Trip
HiAce (B 9012 GHI)
09:00 - Kantor Bekasi
Rabu, 03 Sep
Seluruh armada tersedia (Ready di Pool)
Kamis, 04 Sep
Sesi Antar
Innova (B 1234 KAA)
10:00 - Bandara Soetta
Manual Book β€’ Bab 2.3 Khusus Administrator General Affairs

πŸ“– Panduan GA: Verifikasi Approval & Plotting Penugasan Armada

Alur meninjau pengajuan masuk, menyetujui, menolak dengan alasan, dan menugaskan mobil serta driver.

⚑ Layar Verifikasi & Plotting GA (/ga/reservations) Menu Tertutup Petugas
http://127.0.0.1:8000/ga/reservations
Role: PIC GA
β‘ 
#15 - Budi Santoso (Divisi IT) Split-Trip
πŸ“ Kemenkeu RI β€’ πŸ‘₯ 3 Penumpang β€’ ⏰ 01 Sep, 08:30 WIB
β‘‘
β‘’
Penugasan Armada (Modal Plotting):
Pilih Mobil Sesi Antar:
Toyota Innova (B 1234 KAA)
Pilih Driver Sesi Antar:
Pak Supriyadi (0812-3456-7890)
Terbitkan Tiket QR & Kirim WhatsApp Otomatis →
Manual Book β€’ Bab 2.4 Khusus Administrator General Affairs

πŸ“– Panduan GA: Manajemen Master Data Mobil & Supir

Tata cara menambah armada mobil baru, mengatur status operasional (Ready/Dinas/Bengkel), serta mengelola lisensi driver.

πŸš— Layar Master Armada Kendaraan Kantor (/ga/vehicles) CRUD Master Data
http://127.0.0.1:8000/ga/vehicles
Fleet Management
β‘  Daftar Kendaraan Kantor (Total: 8 Unit)
πŸ‘€ Kelola Supir →
β‘‘
Total Mobil 8 Unit
Ready di Pool 5 Unit
Sedang Dinas 2 Unit
Servis / Bengkel 1 Unit
β‘’
Plat Nomor Merk & Model Kapasitas Status Operasional Aksi
B 1234 KAA Toyota Innova Reborn 2.4 V 7 Orang Ready Edit β€’ Kirim Bengkel
B 5678 DEF Toyota Avanza 1.5 G TSS 7 Orang Sedang Dinas Edit
B 9012 GHI Toyota HiAce Commuter 15 Orang Servis Bengkel Selesai Servis
πŸ‘€ Panduan Pengelolaan Master Supir (/ga/drivers):

1. Buka menu Master Supir -> Klik + Tambah Supir.
2. Masukkan Nama Lengkap, Nomor WhatsApp aktif (format internasional e.g. 6281234567890), dan Nomor Lisensi SIM (SIM A / B1).
3. Supir yang sedang bertugas atau sedang izin/cuti dapat diubah statusnya menjadi Cuti agar tidak muncul dalam daftar pilihan saat GA melakukan plotting permohonan dinas.

Manual Book β€’ Bab 2.5 Khusus GA & Direksi / Management

πŸ“– Panduan GA: Laporan Rekapitulasi Audit Jarak Tempuh & Ekspor CSV

Tata cara memeriksa odometer mobil, menghitung konsumsi BBM, dan mengunduh berkas laporan format Excel/CSV.

πŸ“Š Layar Rekapitulasi Audit Armada (/ga/reports) Audit Odometer & Gate Log
http://127.0.0.1:8000/ga/reports
Rekapitulasi Dinas
β‘ 
Dari:
Sampai:
Armada:
β‘‘
β‘’
Total Perjalanan 42 Trip
Total Jarak Tempuh 2.845 KM
Armada Teraktif Innova B 1234 KAA
Tgl Dinas Mobil & Supir Pemohon / Tujuan KM Keluar (Checkout) KM Kembali (Checkin) Total KM Tempuh
01/09/2026 Innova B 1234 KAA
Driver: Supriyadi
Budi Santoso
Kemenkeu RI
45.200 km 45.265 km +65 KM
Manual Book β€’ Bab 2.6 Khusus Administrator General Affairs

πŸ“– Panduan GA: Manajemen User & Integrasi Gateway Notifikasi

Tata cara mengelola akun pengguna, reset kata sandi, pengaturan token Fonnte WhatsApp, dan pengujian server SMTP Email.

πŸ‘₯ Manajemen User (/ga/users) RBAC Management

Modul untuk mendaftarkan akun staf internal instansi:

1. Tambah Akun: Masukkan Nama, Email Dinas, Password, dan pilih Peran: User, GA, Security, atau Management.
2. Reset Kata Sandi: Klik tombol "Reset Password" pada akun karyawan yang lupa kata sandi.
3. Ubah Hak Akses: Alihkan peran pegawai bila terjadi mutasi jabatan divisi.
βš™οΈ Pengaturan Gateway (/ga/settings) Live Test Ready

Modul untuk mengonfigurasi jalur komunikasi otomatis sistem:

πŸ’¬ WhatsApp Gateway (Fonnte API): Tempelkan API Token dari dashboard md.fonnte.com, lalu klik tombol "Uji Coba Kirim Pesan WA" untuk memastikan pesan simulasi sukses masuk ke nomor penguji.
πŸ“§ SMTP Email Server: Atur Host SMTP (misal: smtp.gmail.com), Port (587 TLS / 465 SSL), Email, dan App Password, lalu klik tombol "Uji Coba Kirim Email".
Manual Book β€’ Bab 2.7 Khusus Petugas Pos Gerbang

πŸ“– Panduan Pos Security: Scan Barcode QR & Pencatatan Odometer

Petunjuk operasional pemindaian Gate Pass mobil dinas keluar dan masuk kantor.

http://127.0.0.1:8000/gate/scan
Role: Pos Security
β‘ 
Pemindaian QR / Input Token:
TRIP-7X9A2-15
Scan QR penumpang/driver atau ketik token di atas.
β‘‘
Lembar Validasi Fisik:
Mobil: Toyota Innova (B 1234 KAA)
Driver: Pak Supriyadi
Penumpang: Budi Santoso (3 orang)
β‘’
Pencatatan Angka Odometer (KM Spidometer Mobil):
Saat Keluar Pool (Checkout):
KM Awal: 45.200 km
Saat Kembali (Checkin):
KM Akhir: 45.265 km
Selisih Jarak Tempuh Otomatis: 65 KM
Server & Deployment

πŸš€ Panduan Konfigurasi Database & Deployment (Lokal vs Hosting)

Panduan lengkap mengatur berkas .env dan migrasi dari Laragon lokal ke cPanel / VPS Server.

Variabel Environment πŸ’» Komputer Lokal (Laragon) 🌐 Web Hosting / cPanel (Production)
APP_ENV local production
APP_DEBUG true (penelusuran galat tahap pengembangan) false (Wajib nonaktif demi keamanan data)
APP_URL http://127.0.0.1:8000 https://reservasi.namakantor.com
DB_HOST 127.0.0.1 localhost (atau IP MySQL host)
DB_DATABASE vehicle_reservation cpaneluser_vehicle (sesuai nama di cPanel)
DB_USERNAME root cpaneluser_admin (user MySQL cPanel)
DB_PASSWORD (kosong / tanpa password) P@ssw0rdKuat123#
πŸ’»

Menjalankan di Lokal (Laragon)

  1. Buka aplikasi Laragon lalu klik tombol Start All.
  2. Buka browser ke http://localhost/phpmyadmin dan buat database bernama vehicle_reservation.
  3. Import file vehicle_reservation_schema_empty.sql yang sudah Anda unduh.
  4. Buka terminal di folder proyek dan jalankan:
    php artisan serve
  5. Akses website di browser: http://127.0.0.1:8000
🌐

Menjalankan di Web Hosting (cPanel)

  1. Masuk cPanel -> Buka menu MySQL Databases -> Buat Database dan User baru, lalu berikan hak ALL PRIVILEGES.
  2. Buka phpMyAdmin cPanel -> Pilih database tersebut -> Klik tab Import -> Upload file skema SQL bersih.
  3. Upload file proyek ke folder luar /home/user/fleetoffice/.
  4. Pindahkan isi folder public/ ke folder public_html/.
  5. Buka Terminal cPanel dan bersihkan cache aplikasi:
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
πŸ”

Tata Cara Mengganti Username & Password Database

Jika Anda ingin mengganti akun pengguna database (misalnya membuat kredensial baru dengan password yang kuat), jalankan 3 tahapan berikut:

1 Ubah di File .env

Buka berkas .env dan ubah nilainya:

DB_USERNAME=user_baru
DB_PASSWORD="Password123#"

*Gunakan tanda petik ganda "..." jika password mengandung karakter khusus (#, !, $, spasi).

2 Daftarkan di MySQL

User harus sudah dibuat di MySQL agar Laravel bisa masuk:

  • Laragon: Buka phpMyAdmin → Tab User accountsAdd user account → Berikan hak akses database.
  • cPanel: Menu MySQL DatabasesAdd New User → Pasangkan ke database dengan ALL PRIVILEGES.
3 Bersihkan Cache

Jalankan perintah ini di terminal agar Laravel segera membaca kredensial terbaru:

php artisan config:clear

Atau restart php artisan serve dengan menekan Ctrl+C lalu jalankan ulang.

Kamus Error & Troubleshooting

πŸ› οΈ Kamus Kode Error & Panduan Penanganan Masalah

Daftar potensi pesan error sistem (Database, Web Server, HTTP, & API) beserta cara mengatasinya secara mandiri.

1. Masalah Database & Query (MySQL / MariaDB)

SQLSTATE[HY000] [2002] Connection Refused

Penyebab: Layanan MySQL (Laragon/MariaDB) mati atau nomor port database salah.

πŸ’‘ Solusi: Buka Laragon → Klik Start All. Pastikan indikator MySQL berwarna hijau dan di berkas .env tertulis DB_PORT=3306.
SQLSTATE[HY000] [1045] Access Denied

Penyebab: Username / Password pada berkas .env tidak cocok dengan kredensial MySQL.

πŸ’‘ Solusi: Periksa DB_USERNAME & DB_PASSWORD di .env. Jika di Laragon default-nya adalah user root tanpa password. Lalu jalankan php artisan config:clear.
SQLSTATE[HY000] [1049] Unknown Database

Penyebab: Nama database yang dicari belum pernah dibuat di phpMyAdmin.

πŸ’‘ Solusi: Buka http://localhost/phpmyadmin, buat database bernama vehicle_reservation, lalu import file skema SQL.
SQLSTATE[42S02] Table Not Found Missing Tables

Penyebab: Basis data telah dibuat namun struktur tabel belum diinisialisasi (skema basis data belum di-import).

πŸ’‘ Solusi: Import berkas vehicle_reservation_schema_empty.sql lewat phpMyAdmin atau ketik php artisan migrate di terminal.

2. Masalah Protokol Web & HTTP Status Code

HTTP 419 Page Expired

Token CSRF habis karena form terlalu lama tidak disubmit.

πŸ’‘ Cukup Refresh (F5) halaman web dan isi kembali form.
HTTP 500 Internal Server Error

Error sintaks PHP, file .env hilang, atau folder storage tidak ada write-permission.

πŸ’‘ Cek log detail di storage/logs/laravel.log & jalankan php artisan key:generate.
HTTP 404 (Hosting) Routing Error

Halaman depan muncul tapi link lain 404 Not Found di web hosting.

πŸ’‘ File .htaccess tertinggal/tidak ter-copy ke dalam folder public_html.

3. Masalah Notifikasi WhatsApp (Fonnte) & Email SMTP

πŸ“± Pesan WhatsApp Gagal / Timeout (Fonnte)
  • Periksa status WhatsApp di md.fonnte.com (harus bertuliskan Connect).
  • Buka menu GA → Pengaturan Sistem dan periksa kembali Token API Fonnte.
  • Gunakan tombol "Test Kirim WhatsApp" di aplikasi untuk simulasi langsung.
βœ‰οΈ Email Notifikasi Gagal Terkirim
  • Jika menggunakan Gmail SMTP, wajib menggunakan App Password 16 Digit (bukan password login biasa).
  • Pastikan port SMTP diset ke 465 (SSL) atau 587 (TLS).
  • Gunakan fitur "Test Kirim Email" di menu Pengaturan GA.

4. Masalah Khusus Lingkungan Hosting (cPanel / Shared Hosting / VPS)

PHP Version Mismatch PHP 8.2+ Needed

Gejala: Composer error: require a PHP version ">= 8.2.0".

πŸ’‘ Solusi: Buka cPanel → Menu MultiPHP Manager → Ubah domain ke PHP 8.2 atau 8.3.
Tampilan CSS/JS Rusak Mixed Content HTTPS

Gejala: Domain HTTPS tapi aset CSS/JS di-load via HTTP polos sehingga terblokir browser.

πŸ’‘ Solusi: Pastikan APP_URL=https://... di .env hosting dan aktifkan URL::forceScheme('https') di AppServiceProvider.php.
White Screen of Death Layar Putih Polos

Gejala: Layar putih tanpa pesan karena APP_DEBUG=false saat terjadi fatal error.

πŸ’‘ Solusi: Buka File Manager cPanel → Lihat berkas public_html/error_log untuk melihat baris error sesungguhnya.
Gambar/Aset 404 Storage Symlink

Gejala: Foto armada atau tiket QR tidak muncul karena fungsi symlink hosting di-disable.

πŸ’‘ Solusi: Ketik php artisan storage:link di Terminal cPanel, atau buat route URL sementara untuk memanggil Artisan::call('storage:link').
require(vendor/autoload) File Not Found

Gejala: Folder vendor tertinggal atau path di public_html/index.php salah arah.

πŸ’‘ Solusi: Pastikan path require di index.php mengarah tepat ke folder proyek luar: __DIR__.'/../fleetoffice/vendor/autoload.php'.
Timeout Export Laporan 504 Gateway Timeout

Gejala: Saat download laporan audit besar, proses putus karena limit PHP 30 detik.

πŸ’‘ Solusi: Buka cPanel → Select PHP VersionOptions → Naikkan max_execution_time jadi 120 dan memory_limit jadi 512M.
βš™οΈ

Prosedur Pemulihan & Pemeliharaan Cache Sistem (System Maintenance & Recovery Commands)

Apabila sistem mengalami kendala inkonsistensi antarmuka pengguna, pembaruan rute tidak terdeteksi, atau konfigurasi baru pada berkas .env belum dimuat oleh engine framework, jalankan prosedur pembersihan cache berikut melalui terminal:

# Membersihkan seluruh cache konfigurasi, routing, event, dan kompilasi view
php artisan optimize:clear
Automated Communications

πŸ”” Matriks Notifikasi Otomatis (WhatsApp Gateway & Email SMTP)

Spesifikasi alur pengiriman pesan real-time berbasis peristiwa (event-driven) kepada pemohon dan driver bertugas.

Peristiwa Pemicu (Trigger) Pihak Penerima Saluran Media Data / Isi Notifikasi
1. Persetujuan Reservasi (Approval) Pemohon / Karyawan WhatsApp Email Status DISETUJUI βœ…, rincian agenda (Tujuan, Peserta, Jam), serta link lacak status.
2. Penolakan Reservasi (Rejection) Pemohon / Karyawan WhatsApp Email Status DITOLAK ❌ disertai Catatan / Alasan Resmi Penolakan dari GA.
3. Plotting & Terbit Tiket Pemohon / Karyawan WhatsApp Email Tiket QR Pass Digital: Plat mobil, nama & kontak supir, serta Link Barcode Tiket.
4. Plotting & Terbit Tiket Driver / Supir Bertugas WhatsApp Resmi Surat Tugas Operasional (SPK): Unit armada, nama penumpang, destinasi, dan instruksi odometer.
πŸ“± Contoh WhatsApp ke Pemohon (Tiket Terbit)
[TIKET ARMADA KANTOR - SESI ANTAR]
Halo Budi Santoso, armada dinas Anda telah siap:
πŸš— Mobil: Toyota Innova Reborn (B 1234 KAA)
πŸ‘€ Driver: Pak Supriyadi (08123456789)
⏰ Waktu Tugas: Senin, 01 Sep 2026, 08:30 WIB
🎫 Token: TRIP-9A2B4C-15
πŸ“± Tiket QR: https://.../qr/TRIP-9A2B4C-15
πŸ“± Contoh WhatsApp ke Driver (Surat Tugas)
[TUGAS DRIVER KANTOR - SESI ANTAR]
Halo Pak Supriyadi, Anda mendapat penugasan dinas:
πŸš— Kendaraan: Toyota Innova (B 1234 KAA)
πŸ“ Tujuan: Kementerian Keuangan RI, Jakpus
πŸ‘₯ Penumpang: Budi Santoso (Divisi IT)
⏰ Waktu Tugas: Senin, 01 Sep 2026, 08:30 WIB
*Lapor odometer di Pos Security saat checkout & checkin.
Information Security & Risk Governance

πŸ›‘οΈ Arsitektur Keamanan Informasi, Manajemen Risiko & Mitigasi

Standar perlindungan data instansi, analisis potensi ancaman siber, dan prosedur operasional penanganannya.

πŸ”‘ Hashing Bcrypt 12 Rounds

Kata sandi diacak satu arah dengan garam unik (*salt*), kebal dari pembobolan kamus (*rainbow table*).

πŸ›‘οΈ Strict RBAC Segregation

Pos security terisolasi mutlak dari data GA. Dropdown tukar peran dihapus total demi integritas akses.

πŸ”’ Proteksi CSRF Token

Setiap formulir transaksi wajib memverifikasi token kriptografis rahasia untuk menangkal aksi pemalsuan sesi.

πŸ’‰ Anti SQL Injection

Seluruh query memakai ORM prepared statements dan parameter binding, mengeliminasi celah injeksi database.

🧼 Sanitasi Output Anti-XSS

Karakter HTML otomatis di-escape sebelum tampil di peramban, menolak injeksi skrip JavaScript jahat.

🎫 Token Tiket Anti-IDOR

Tiket QR memakai token alfanumerik acak, bukan angka ID urut, mencegah tebak-tebakan tiket digital.

🌐 Enforced HTTPS / TLS

Jalur komunikasi wajib terenkripsi SSL/HTTPS di server produksi untuk menangkal penyadapan jaringan (*sniffing*).

🀐 Isolasi Kredensial .env

Password database dan token WA diisolasi di luar public folder dengan APP_DEBUG=false saat produksi.

πŸ“‹ Matriks Analisis Risiko Keamanan & Penanganannya

Skenario Potensi Risiko Tingkat Risiko Dampak Operasional Solusi & Mitigasi Sistem
1. Brute Force Login Petugas Tinggi Akun PIC GA / Security diambil alih pihak luar. Login Rate Limiting: Maksimal 5 percobaan gagal berturut-turut sebelum akun diblokir sementara 60 detik.
2. Pemalsuan Tiket QR Mobil Tinggi Kendaraan dinas keluar pool kantor tanpa izin resmi. Validasi Silang Fisik: Security memvalidasi kesesuaian plat mobil, nama driver bertugas, dan identitas penumpang di layar scan.
3. Kebocoran Berkas .env Kritis Kredensial database dan token Fonnte terekspos. Isolasi Document Root: File proyek di luar public_html dan berkas .* otomatis diblokir oleh web server.
4. Kebocoran Riwayat Perjalanan Sedang Jadwal mobilitas direksi dan staf tersebar ke publik. RBAC Laporan: Modul laporan audit dan rekapitulasi data hanya dapat diakses oleh akun Manajemen dan PIC GA.
5. Kuota WhatsApp Habis / Spamming Sedang Notifikasi tiket QR ke pemohon dan driver terhambat. Event Throttling: Pesan WA hanya dikirim saat peristiwa resmi (Approval, Rejection, Plotting). Nomor HP distandarisasi ke format internasional.
🚨

Prosedur Standar Tanggap Insiden Keamanan (Incident Response Procedure)

1. Jika Terjadi Indikasi Akun Bocor:

Buka menu GA → Manajemen User (`/ga/users`), segera reset kata sandi akun terkait atau ubah status peran menjadi nonaktif, lalu bersihkan sesi login lewat terminal.

2. Jika Kredensial Server Terindikasi Bocor:

Segera ganti password database di cPanel dan regenerate token Fonnte di dashboard md.fonnte.com, perbarui berkas .env, lalu jalankan php artisan optimize:clear.