5.1 KiB
5.1 KiB
Sistem Booking Kontrakan - Dokumentasi
Ringkasan
Sistem ini memungkinkan pemilik kontrakan untuk melacak status penyewaan kontrakan mereka, termasuk siapa yang sedang menyewa, periode sewa, dan status pembayaran.
Fitur Utama
1. Status Kontrakan
Setiap kontrakan memiliki status yang menunjukkan ketersediaan:
- Tersedia (available) - Kontrakan siap disewakan
- Dipesan (booked) - Kontrakan sudah dibooking tapi belum ditempati
- Terisi (occupied) - Kontrakan sedang ditempati penyewa
- Pemeliharaan (maintenance) - Kontrakan sedang dalam perbaikan
2. Manajemen Booking
Setiap booking memiliki siklus hidup:
- Pending - Booking baru dibuat, menunggu konfirmasi
- Confirmed - Booking dikonfirmasi, penyewa belum masuk
- Checked In - Penyewa sudah masuk dan menempati kontrakan
- Completed - Masa sewa selesai, penyewa sudah keluar
- Cancelled - Booking dibatalkan
3. Pengecekan Konflik Otomatis
- Sistem mencegah double-booking dengan pengecekan overlap tanggal
- Menggunakan database transaction untuk menghindari race condition
- Validasi ketersediaan real-time via AJAX
4. Sinkronisasi Status Otomatis
- Status kontrakan otomatis berubah saat ada aksi booking
- Artisan command untuk sinkronisasi manual:
php artisan kontrakan:sync-status
Cara Penggunaan
Membuat Booking Baru
- Klik menu Booking Kontrakan di sidebar
- Klik tombol Buat Booking Baru
- Pilih kontrakan yang akan dibooking
- Isi tanggal mulai dan selesai (sistem akan cek ketersediaan)
- Isi data penyewa (nama, nomor HP)
- Klik Simpan Booking
Mengelola Booking
- Konfirmasi: Ubah status dari Pending ke Confirmed
- Check-in: Tandai penyewa sudah masuk (status kontrakan jadi "Terisi")
- Check-out: Tandai penyewa sudah keluar (status kontrakan kembali "Tersedia")
- Batalkan: Batalkan booking dengan alasan (opsional)
- Tandai Lunas: Catat pembayaran sudah lunas
Melihat Riwayat Booking
- Dari halaman detail kontrakan, klik tombol Riwayat Booking
- Atau dari menu Booking → filter berdasarkan kontrakan
Struktur Database
Tabel kontrakans (diperbarui)
status ENUM('available', 'booked', 'occupied', 'maintenance') DEFAULT 'available'
occupied_until DATE NULL
Tabel bookings (baru)
- id
- kontrakan_id (FK ke kontrakans)
- user_id (FK ke users, nullable)
- start_date
- end_date
- status (pending/confirmed/checked_in/completed/cancelled)
- amount (biaya sewa)
- payment_status (unpaid/paid/refunded)
- payment_method
- paid_at
- tenant_name
- tenant_phone
- notes
- confirmed_at
- checked_in_at
- checked_out_at
- cancelled_at
- cancellation_reason
- timestamps
File-file Baru
Migrations
database/migrations/2025_12_26_000001_add_status_to_kontrakans.phpdatabase/migrations/2025_12_26_000002_create_bookings_table.php
Models
app/Models/Booking.phpapp/Models/Kontrakan.php(diperbarui)
Controllers
app/Http/Controllers/BookingController.php
Views
resources/views/admin/bookings/index.blade.php- Daftar bookingresources/views/admin/bookings/create.blade.php- Form buat bookingresources/views/admin/bookings/show.blade.php- Detail bookingresources/views/admin/bookings/edit.blade.php- Edit bookingresources/views/admin/bookings/kontrakan-history.blade.php- Riwayat booking per kontrakan
Commands
app/Console/Commands/SyncKontrakanStatus.php- Sinkronisasi status
API Endpoint
Cek Ketersediaan
GET /admin/bookings/check-availability
Parameters:
- kontrakan_id: ID kontrakan
- start_date: Tanggal mulai (YYYY-MM-DD)
- end_date: Tanggal selesai (YYYY-MM-DD)
- exclude_id: ID booking yang dikecualikan (untuk edit)
Response:
{
"available": true/false,
"conflicts": [...] // daftar booking yang bertabrakan
}
Artisan Commands
Sinkronisasi Status Manual
php artisan kontrakan:sync-status
Gunakan untuk memastikan status semua kontrakan sesuai dengan data booking.
Tips untuk Sidang TA
Poin-poin yang bisa disampaikan:
- Concurrency Handling - Sistem menggunakan database transaction untuk mencegah race condition saat multiple user membuat booking bersamaan
- Conflict Detection - Algoritma pengecekan overlap tanggal untuk mencegah double-booking
- State Machine - Booking memiliki lifecycle yang terstruktur dengan validasi transisi status
- Real-time Validation - AJAX untuk validasi ketersediaan sebelum submit
- Audit Trail - Setiap aksi dicatat waktunya (confirmed_at, checked_in_at, dll)
- Soft Status Sync - Status kontrakan otomatis mengikuti status booking aktif
Demo yang bisa ditampilkan:
- Buat booking baru dengan cek ketersediaan
- Konfirmasi → Check-in → Check-out flow
- Coba buat booking yang overlap (akan ditolak)
- Batalkan booking dan lihat status kontrakan berubah
- Jalankan artisan command untuk sync status
Pengembangan Lanjutan (Future)
- Notifikasi via WhatsApp/Email saat booking berubah status
- Dashboard laporan pendapatan per bulan
- Integrasi payment gateway
- Calendar view untuk visualisasi booking
- Export laporan ke PDF/Excel