MIF_E31230069/spk_kontrakan/BOOKING_SYSTEM.md

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:

  1. Pending - Booking baru dibuat, menunggu konfirmasi
  2. Confirmed - Booking dikonfirmasi, penyewa belum masuk
  3. Checked In - Penyewa sudah masuk dan menempati kontrakan
  4. Completed - Masa sewa selesai, penyewa sudah keluar
  5. 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

  1. Klik menu Booking Kontrakan di sidebar
  2. Klik tombol Buat Booking Baru
  3. Pilih kontrakan yang akan dibooking
  4. Isi tanggal mulai dan selesai (sistem akan cek ketersediaan)
  5. Isi data penyewa (nama, nomor HP)
  6. 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.php
  • database/migrations/2025_12_26_000002_create_bookings_table.php

Models

  • app/Models/Booking.php
  • app/Models/Kontrakan.php (diperbarui)

Controllers

  • app/Http/Controllers/BookingController.php

Views

  • resources/views/admin/bookings/index.blade.php - Daftar booking
  • resources/views/admin/bookings/create.blade.php - Form buat booking
  • resources/views/admin/bookings/show.blade.php - Detail booking
  • resources/views/admin/bookings/edit.blade.php - Edit booking
  • resources/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:

  1. Concurrency Handling - Sistem menggunakan database transaction untuk mencegah race condition saat multiple user membuat booking bersamaan
  2. Conflict Detection - Algoritma pengecekan overlap tanggal untuk mencegah double-booking
  3. State Machine - Booking memiliki lifecycle yang terstruktur dengan validasi transisi status
  4. Real-time Validation - AJAX untuk validasi ketersediaan sebelum submit
  5. Audit Trail - Setiap aksi dicatat waktunya (confirmed_at, checked_in_at, dll)
  6. Soft Status Sync - Status kontrakan otomatis mengikuti status booking aktif

Demo yang bisa ditampilkan:

  1. Buat booking baru dengan cek ketersediaan
  2. Konfirmasi → Check-in → Check-out flow
  3. Coba buat booking yang overlap (akan ditolak)
  4. Batalkan booking dan lihat status kontrakan berubah
  5. 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