# π« Banyu Biru Ticketing & Booking System
---
## π Table of Contents
- [π― Tentang Sistem](#-tentang-sistem)
- [β¨ Fitur Utama](#-fitur-utama)
- [π₯ Fitur User](#-fitur-user-pengunjung)
- [π Fitur Admin](#-fitur-admin)
- [π οΈ Teknologi yang Digunakan](#οΈ-teknologi-yang-digunakan)
- [π Persyaratan Sistem](#-persyaratan-sistem)
- [π Instalasi](#-instalasi)
- [π€ Default Login](#-default-login)
- [π Struktur Folder](#-struktur-folder)
- [π¨ Tema & Desain](#-tema--desain)
- [π Database Schema](#-database-schema)
- [π Keamanan](#-keamanan)
- [π± Fitur QR Code](#-fitur-qr-code)
- [π Workflow Sistem](#-workflow-sistem)
- [π Troubleshooting](#-troubleshooting)
- [π€ Kontribusi](#-kontribusi)
- [π License](#-license)
- [π¨βπ» Developer](#-developer)
- [π Kontak & Support](#-kontak--support)
- [π Acknowledgments](#-acknowledgments)
---
## π― Tentang Sistem
|
**Banyu Biru Ticketing & Booking System** adalah sistem manajemen tiket dan booking berbasis web untuk objek wisata Banyu Biru di Nganjuk. Sistem ini memudahkan pengunjung untuk membeli tiket masuk dan melakukan booking pendopo secara online, serta membantu admin dalam mengelola transaksi dan verifikasi pembayaran.
|
### π― Tujuan Sistem
| Tujuan | Deskripsi |
|--------|-----------|
| π | Digitalisasi proses pembelian tiket dan booking pendopo |
| π³ | Mempermudah pengunjung dalam melakukan transaksi online |
| π | Meningkatkan efisiensi pengelolaan transaksi oleh admin |
| π± | Menyediakan sistem verifikasi tiket dengan QR code |
| π | Memberikan laporan statistik penjualan real-time |
---
## β¨ Fitur Utama
### π₯ Fitur User (Pengunjung)
#### ποΈ Pembelian Tiket
| Fitur | Deskripsi |
|-------|-----------|
| π | Lihat daftar tiket yang tersedia dengan harga |
| π
| Pilih tanggal kunjungan dan jumlah tiket |
| π² | Generate QR code otomatis untuk setiap tiket |
| π° | Upload bukti pembayaran transfer |
| π | Download tiket dalam format PDF setelah dikonfirmasi |
| π¨οΈ | Print tiket langsung dari browser |
#### ποΈ Booking Pendopo
| Fitur | Deskripsi |
|-------|-----------|
| π | Cek ketersediaan tanggal booking secara real-time |
| π | Form booking dengan data pengunjung lengkap |
| π³ | Upload bukti pembayaran booking |
| π | Lihat status booking (pending/confirmed/rejected) |
| π | Notifikasi status verifikasi |
#### π Riwayat Transaksi
| Fitur | Deskripsi |
|-------|-----------|
| π | Lihat riwayat pembelian tiket |
| π | Lihat riwayat booking pendopo |
| π | Filter berdasarkan status transaksi |
| β¬οΈ | Download ulang tiket yang sudah dikonfirmasi |
#### π€ Manajemen Profil
| Fitur | Deskripsi |
|-------|-----------|
| βοΈ | Edit profil (nama, email, telepon, alamat) |
| π | Ubah password dengan verifikasi password lama |
| ποΈ | Lihat informasi akun |
---
### π Fitur Admin
#### π Dashboard
| Fitur | Deskripsi |
|-------|-----------|
| π« | Statistik total tiket terjual (confirmed) |
| π΅ | Penjualan bulan ini (tiket + booking) |
| π° | Total pendapatan dari transaksi terkonfirmasi |
| π | Chart penjualan 6 bulan terakhir |
| π | Daftar order dan booking terbaru |
#### β
Verifikasi Pembayaran
| Fitur | Deskripsi |
|-------|-----------|
| π | Lihat daftar order tiket dengan status |
| π | Lihat detail order dan bukti pembayaran |
| βοΈ | Konfirmasi pembayaran tiket |
| β | Tolak pembayaran dengan alasan |
| βοΈ | Verifikasi pembayaran booking |
#### π± QR Scanner Verifikasi Tiket
| Fitur | Deskripsi |
|-------|-----------|
| π· | Scan QR code tiket menggunakan kamera |
| β¨οΈ | Input manual kode tiket |
| π | Verifikasi validitas tiket |
| βοΈ | Tandai tiket sebagai sudah dipakai |
| π | Cek status tiket (valid/sudah dipakai) |
#### π« Manajemen Tiket
| Fitur | Deskripsi |
|-------|-----------|
| β | CRUD tiket (Create, Read, Update, Delete) |
| π΅ | Set harga tiket |
| π | Toggle status aktif/nonaktif tiket |
| π | Deskripsi tiket |
#### π¦ Manajemen Rekening Bank
| Fitur | Deskripsi |
|-------|-----------|
| β | CRUD rekening bank untuk pembayaran |
| π | Set rekening aktif/nonaktif |
| ποΈ | Tampilkan rekening di halaman pembayaran user |
#### π¨βπΌ Manajemen Admin
| Fitur | Deskripsi |
|-------|-----------|
| β | CRUD akun admin |
| π₯ | Assign role admin ke user |
| βοΈ | Edit profil admin |
| π | Ubah password admin |
---
## π οΈ Teknologi yang Digunakan
### Backend
| Technology | Description |
|------------|-------------|
|

| PHP Framework |
|

| Programming Language |
|

| Database |
|

| Role & Permission |
### Frontend
| Technology | Description |
|------------|-------------|
|

| CSS Framework |
|

| Data Visualization |
|

| Beautiful Alerts |
|

| Icons |
|

| QR Code Scanner |
### Libraries & Tools
| Library | Description |
|---------|-------------|
| π² SimpleSoftwareIO/simple-qrcode | QR Code Generator |
| π Barryvdh/laravel-dompdf | PDF Generator |
| π Laravel Breeze | Authentication Scaffolding |
---
## π Persyaratan Sistem
| Requirement | Description |
|-------------|-------------|
| π’ | PHP >= 8.2 |
| π¦ | Composer |
| ποΈ | MySQL >= 8.0 |
| π¦ | Node.js & NPM (untuk asset compilation) |
| π | Web Server (Apache/Nginx) |
### π¦ PHP Extensions Required
```
BCMath, Ctype, Fileinfo, JSON, Mbstring, OpenSSL, PDO, Tokenizer, XML, GD
```
---
## π Instalasi
### β‘ Cara Cepat (Setelah Clone)
```bash
# 1. Masuk ke folder project
cd wisata-web
# 2. Install semua dependencies
composer install
npm install
# 3. Buat file .env dan generate application key
cp .env.example .env
php artisan key:generate
# 4. Buat database (via phpMyAdmin atau command)
# Windows (XAMPP):
C:\xampp\mysql\bin\mysql.exe -u root -e "CREATE DATABASE wisata_web CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 5. Jalankan migrations (tabel sessions sudah termasuk!)
php artisan migrate
# 6. Seed data (opsional - untuk data awal)
php artisan db:seed
# 7. Compile frontend assets
npm run build
# 8. Buat storage link
php artisan storage:link
# 9. Jalankan server
php artisan serve
```
> π **Akses**: `http://127.0.0.1:8000`
### π Catatan Penting
- β
**Tabel `sessions` sudah termasuk** dalam migration Laravel default, tidak perlu command tambahan
- β
**Cukup jalankan** `php artisan migrate` untuk membuat semua tabel
- β οΈ **Pastikan database sudah dibuat** di MySQL/phpMyAdmin sebelum menjalankan migration
---
## π Troubleshooting
### β Error: Table doesn't exist
Jika muncul error seperti `Table 'wisata_web.sessions' doesn't exist`:
```bash
# Hapus dan buat ulang database
C:\xampp\mysql\bin\mysql.exe -u root -e "DROP DATABASE IF EXISTS wisata_web; CREATE DATABASE wisata_web CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# Jalankan ulang migrations
php artisan migrate:fresh
```
### β Error: Tablespace corrupted
Jika muncul error `Tablespace for table exists. Please DISCARD the tablespace before IMPORT`:
```bash
# Hapus folder database manual (Windows XAMPP)
rmdir /s /q C:\xampp\mysql\data\wisata_web
# Buat database baru
C:\xampp\mysql\bin\mysql.exe -u root -e "CREATE DATABASE wisata_web CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# Jalankan migrations
php artisan migrate:fresh
```
### β Error: .env file not found
```bash
cp .env.example .env
php artisan key:generate
```
---
## π€ Default Login
| Role | Email | Password |
|------|-------|----------|
| π΄ Admin | admin@banyubiru.com | password |
| π΅ User 1 | pengguna1@banyubiru.test | password |
| π΅ User 2 | pengguna2@banyubiru.test | password |
| ... | ... | ... |
| π΅ User 8 | pengguna8@banyubiru.test | password |
> β οΈ **Penting**: Ubah password default setelah login pertama kali!
---
## π Struktur Folder
```
π wisata-web/
βββ π app/
β βββ π Http/Controllers/
β β βββ π Admin/ # Controller untuk admin
β β βββ π User/ # Controller untuk user
β β βββ AuthController.php
β βββ π Models/ # Eloquent Models
β βββ π Support/ # Helper functions
βββ π database/
β βββ π migrations/ # Database migrations
β βββ π seeders/ # Database seeders
βββ π public/
β βββ π css/ # Compiled CSS
β βββ π images/ # Static images
β βββ π payment-proofs/ # Bukti pembayaran
β βββ π qrcodes/ # Generated QR codes
βββ π resources/
β βββ π css/ # Source CSS
β βββ π js/ # Source JavaScript
β βββ π views/ # Blade templates
β βββ π admin/ # Admin views
β βββ π auth/ # Auth views
β βββ π user/ # User views
β βββ π layouts/ # Layout templates
β βββ π partials/ # Reusable components
βββ π routes/
β βββ web.php # Web routes
βββ π flowcharts/ # Flowchart documentation
βββ π database.md # Database documentation
βββ π usecase.md # Use case documentation
βββ π activity-diagram.md # Activity diagram documentation
```
---
## π¨ Tema & Desain
### π¨ Color Palette
| Color | Hex Code | Usage |
|-------|----------|-------|
| π¦ Primary | `#0f766e` | Main buttons, headers |
| π¦ Secondary | `#14b8a6` | Accents, highlights |
| π© Accent | `#5eead4` | Hover states |
| β¬ Background | `#f0fdfa` | Page background |
### β¨ UI/UX Features
- π± **Responsive** - Mobile, tablet, dan desktop
- π **Dark Sidebar** - Dengan gradient teal
- π **Modern Cards** - Dengan border teal
- π **Rounded Buttons** - Desain modern
- β¨ **Animations** - Smooth transitions
- π **SweetAlert** - Konfirmasi yang indah
- ποΈ **Password Toggle** - Show/hide password
- β³ **Loading States** - User feedback
---
## π Database Schema
### π Tabel Utama
| No | Tabel | Deskripsi |
|----|-------|-----------|
| 1 | `users` | Data user dan admin |
| 2 | `tickets` | Master data tiket |
| 3 | `ticket_orders` | Order pembelian tiket |
| 4 | `ticket_order_items` | Detail tiket per order |
| 5 | `bookings` | Data booking pendopo |
| 6 | `places` | Master data tempat (pendopo) |
| 7 | `bank_accounts` | Rekening bank untuk pembayaran |
| 8 | `roles & permissions` | Role-based access control |
> π **Lihat dokumentasi lengkap**: [database.md](database.md)
---
## π Keamanan
| Feature | Description |
|---------|-------------|
| π | Password hashing menggunakan bcrypt |
| π‘οΈ | CSRF protection pada semua form |
| π₯ | Role-based authorization (admin/user) |
| β
| Input validation & sanitization |
| ποΈ | SQL injection protection (Eloquent ORM) |
| π« | XSS protection |
| π | File upload validation (type & size) |
| β° | Session management |
---
## π± Fitur QR Code
### π² Generate QR Code
| Feature | Description |
|---------|-------------|
| β‘ | Otomatis generate saat pembelian tiket |
| π | Format: SVG (scalable) |
| π’ | Berisi kode tiket unik (AT-XXXXX) |
| π | Disimpan di `/public/qrcodes/` |
### π· Scan QR Code
| Feature | Description |
|---------|-------------|
| π· | Menggunakan library html5-qrcode |
| πΈ | Akses kamera untuk scanning |
| π€ | Auto-detect dan submit |
| β¨οΈ | Fallback: input manual kode tiket |
---
## π Workflow Sistem
### π Alur Pembelian Tiket
```
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β Login βββββΆβ Pilih βββββΆβ Jumlah βββββΆβ Generate β
β β β Tiket β β Tiket β β QR β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β
βΌ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β Download ββββββ Verified ββββββ Upload ββββββ Payment β
β Tiket β β (β) β β Bukti β β β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
```
### ποΈ Alur Booking Pendopo
```
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β Login βββββΆβ Cek βββββΆβ Isi βββββΆβ Upload β
β β βKetersediaanβ β Form β β Bukti β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β
βΌ
ββββββββββββ ββββββββββββ ββββββββββββ
β Booking ββββββ Verified ββββββ Admin β
βConfirmed β β (β) β β Verifikasiβ
ββββββββββββ ββββββββββββ ββββββββββββ
```
### π· Alur Verifikasi Tiket
```
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β Scan βββββΆβ Cek βββββΆβ TampilkanβββββΆβ Tandai β
β QR β β Validitasβ β Info β β Dipakai β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
```
---
## π Troubleshooting
### β Error: Class "SimpleSoftwareIO\QrCode\Facades\QrCode" not found
```bash
composer require simplesoftwareio/simple-qrcode
```
### β Error: Storage link not found
```bash
php artisan storage:link
```
### β Error: Permission denied pada folder storage
```bash
chmod -R 775 storage bootstrap/cache
```
### π· QR Scanner tidak bisa akses kamera
- β
Pastikan browser memiliki izin akses kamera
- β
Gunakan HTTPS (atau localhost)
- β
Coba browser lain (Chrome/Firefox)
---
## π€ Kontribusi
Kontribusi sangat diterima! Silakan:
```
1. π΄ Fork repository ini
2. πΏ Buat branch fitur (`git checkout -b feature/AmazingFeature`)
3. πΎ Commit perubahan (`git commit -m 'Add some AmazingFeature'`)
4. π€ Push ke branch (`git push origin feature/AmazingFeature'`)
5. π Buat Pull Request
```
---
## π License
Sistem ini menggunakan framework Laravel yang berlisensi
MIT license
---
## π¨βπ» Developer
| | |
|:---:|:---|
| **Ardhika** | |
| π | [GitHub](https://github.com/ardhikaxx) |
| π¦ | [Repository](https://github.com/ardhikaxx/banyu-biru-nganjuk) |
---
## π Kontak & Support
Jika ada pertanyaan atau masalah, silakan:
| Contact | Link |
|---------|------|
| π | [Buat Issue](https://github.com/ardhikaxx/banyu-biru-nganjuk/issues) |
| π§ | [Email](mailto:email@example.com) |
---
## π Acknowledgments
| Thanks To | Description |
|-----------|-------------|
| π¦ | Laravel Framework |
| π¨ | Bootstrap Team |
| π° | Font Awesome |
| π | Chart.js |
| π | SweetAlert2 |
| π² | SimpleSoftwareIO QR Code |
| π· | html5-qrcode Library |
---
Made with β€οΈ for Banyu Biru Nganjuk
Β© 2026 Banyu Biru Ticketing & Booking System