From 1a277067f40fc55ac68b8b8f97839993297c9bd6 Mon Sep 17 00:00:00 2001 From: micko samawa Date: Sat, 7 Mar 2026 00:45:30 +0700 Subject: [PATCH] Fix favorites system: improve error handling, type safety, and UI feedback - Rewrite favorite_service.dart with proper error handling, auth checks, and timeouts - Add error state UI to favorites_screen.dart with retry button - Add SnackBar feedback on toggle failures in home/search/detail screens - Type-safe parsing with per-item error handling to prevent crashes - Clean orphan favorite records from database - Add debugPrint logging for troubleshooting - All changes maintain backward compatibility --- FLUTTER_DEVELOPMENT_GUIDE.md | 107 + .../Http/Controllers/AdminAuthController.php | 8 + .../Controllers/Api/FavoriteController.php | 47 +- .../app/Http/Controllers/BackupController.php | 26 +- .../Http/Controllers/DashboardController.php | 12 +- .../app/Http/Controllers/ExportController.php | 34 +- .../app/Http/Controllers/GaleriController.php | 10 + .../Http/Controllers/KontrakanController.php | 4 +- .../Http/Controllers/KriteriaController.php | 4 +- .../Http/Controllers/LaundryController.php | 15 +- .../app/Http/Controllers/ReviewController.php | 4 +- .../app/Http/Controllers/SAWController.php | 21 +- .../Controllers/UserManagementController.php | 16 +- .../app/Http/Middleware/AdminAuth.php | 2 +- spk_kontrakan/app/Models/ActivityLog.php | 12 +- spk_kontrakan/app/Models/Galeri.php | 4 +- spk_kontrakan/app/Models/Review.php | 4 +- spk_kontrakan/app/Models/User.php | 24 + .../Kontrakan/1772135532_69a0a46c03fc2.png | Bin 0 -> 99119 bytes .../Kontrakan/1772137717_69a0acf58a28e.png | Bin 0 -> 109528 bytes .../Kontrakan/1772137812_69a0ad54559b7.png | Bin 0 -> 109528 bytes .../kontrakan/1772137680_69a0acd03b536.png | Bin 0 -> 81406 bytes .../views/Kontrakan/create.blade.php | 4 - .../resources/views/Kontrakan/show.blade.php | 19 +- .../resources/views/Laundry/edit.blade.php | 49 +- .../resources/views/Laundry/show.blade.php | 14 +- .../resources/views/Layouts/admin.blade.php | 15 + .../resources/views/SAW/hasil.blade.php | 1 - .../views/auth/admin-login.blade.php | 1 - .../views/auth/admin-register.blade.php | 3 +- .../resources/views/favorites/index.blade.php | 2 +- spk_kontrakan/routes/web.php | 32 +- spk_kontrakan/start-backend-network.bat | 42 + .../0549a80dc062eecdcc8efbf8312e4fd5.php | 1297 --------- .../0bb244dbd77bcee4d52a59bb59147721.php | 117 - .../15adb941f057c688df2ceb4a9c21ef52.php | 163 -- .../2487b2a216139ea38383fd97d51e2280.php | 231 -- .../2d5c12915a62c546cdaee770c4190ebb.php | 1495 ----------- .../3e2a756e698ea84296e208d7b9a94af0.php | 427 --- .../585ad336c34df32b9792eabb80ba9a63.php | 1680 ------------ .../62b47ba91414543ff7e2fb59fd5405ad.php | 2 +- .../6b304950f45ce77007f7b02d78cabc42.php | 176 -- .../750ed3e845a2f0e93cc431f7924de6f1.php | 1383 ---------- .../81aca8525ebe1474a20ec791c32c9770.php | 15 + .../84dd4efe61f3c815daff24c589049140.php | 2309 ----------------- .../997e6940f3b97384fb2e68c445e4a212.php | 214 -- .../b013a8c110c7b48f95c189a44c72a9f6.php | 1763 ------------- .../ee70804036bd06aaaf7aa7c82c92bb1c.php | 821 ------ .../f9330509a01e8be5e3e2318d14daa2d7.php | 1 - .../f9a1a87513eabf56a496d6aacefe5611.php | 109 - .../fb61136dff9b1102c61099d21d6a923f.php | 957 ------- spk_mobile/lib/config/app_config.dart | 31 +- spk_mobile/lib/config/environment.dart | 24 + spk_mobile/lib/login.dart | 40 +- spk_mobile/lib/main.dart | 20 +- spk_mobile/lib/models/kontrakan.dart | 11 +- spk_mobile/lib/models/laundry.dart | 11 +- spk_mobile/lib/register.dart | 366 ++- .../lib/screens/booking_form_screen.dart | 66 +- .../lib/screens/booking_history_screen.dart | 76 +- .../lib/screens/change_password_screen.dart | 46 +- .../lib/screens/edit_profile_screen.dart | 56 +- spk_mobile/lib/screens/favorites_screen.dart | 117 +- .../lib/screens/improved_home_screen.dart | 161 +- .../lib/screens/kontrakan_detail_screen.dart | 333 ++- .../lib/screens/laundry_detail_screen.dart | 93 +- .../lib/screens/laundry_list_screen.dart | 44 +- spk_mobile/lib/screens/profile_screen.dart | 1156 ++++++--- .../lib/screens/recommendation_screen.dart | 572 ++-- spk_mobile/lib/screens/search_screen.dart | 106 +- spk_mobile/lib/services/auth_service.dart | 7 +- spk_mobile/lib/services/favorite_service.dart | 223 +- .../lib/services/kontrakan_service.dart | 25 +- .../services/server_discovery_service.dart | 145 ++ 74 files changed, 2825 insertions(+), 14600 deletions(-) create mode 100644 FLUTTER_DEVELOPMENT_GUIDE.md create mode 100644 spk_kontrakan/public/uploads/Kontrakan/1772135532_69a0a46c03fc2.png create mode 100644 spk_kontrakan/public/uploads/Kontrakan/1772137717_69a0acf58a28e.png create mode 100644 spk_kontrakan/public/uploads/Kontrakan/1772137812_69a0ad54559b7.png create mode 100644 spk_kontrakan/public/uploads/galeri/kontrakan/1772137680_69a0acd03b536.png create mode 100644 spk_kontrakan/start-backend-network.bat delete mode 100644 spk_kontrakan/storage/framework/views/0549a80dc062eecdcc8efbf8312e4fd5.php delete mode 100644 spk_kontrakan/storage/framework/views/0bb244dbd77bcee4d52a59bb59147721.php delete mode 100644 spk_kontrakan/storage/framework/views/15adb941f057c688df2ceb4a9c21ef52.php delete mode 100644 spk_kontrakan/storage/framework/views/2487b2a216139ea38383fd97d51e2280.php delete mode 100644 spk_kontrakan/storage/framework/views/2d5c12915a62c546cdaee770c4190ebb.php delete mode 100644 spk_kontrakan/storage/framework/views/3e2a756e698ea84296e208d7b9a94af0.php delete mode 100644 spk_kontrakan/storage/framework/views/585ad336c34df32b9792eabb80ba9a63.php delete mode 100644 spk_kontrakan/storage/framework/views/6b304950f45ce77007f7b02d78cabc42.php delete mode 100644 spk_kontrakan/storage/framework/views/750ed3e845a2f0e93cc431f7924de6f1.php delete mode 100644 spk_kontrakan/storage/framework/views/84dd4efe61f3c815daff24c589049140.php delete mode 100644 spk_kontrakan/storage/framework/views/997e6940f3b97384fb2e68c445e4a212.php delete mode 100644 spk_kontrakan/storage/framework/views/b013a8c110c7b48f95c189a44c72a9f6.php delete mode 100644 spk_kontrakan/storage/framework/views/ee70804036bd06aaaf7aa7c82c92bb1c.php delete mode 100644 spk_kontrakan/storage/framework/views/f9a1a87513eabf56a496d6aacefe5611.php delete mode 100644 spk_kontrakan/storage/framework/views/fb61136dff9b1102c61099d21d6a923f.php create mode 100644 spk_mobile/lib/config/environment.dart create mode 100644 spk_mobile/lib/services/server_discovery_service.dart diff --git a/FLUTTER_DEVELOPMENT_GUIDE.md b/FLUTTER_DEVELOPMENT_GUIDE.md new file mode 100644 index 0000000..ea58b4d --- /dev/null +++ b/FLUTTER_DEVELOPMENT_GUIDE.md @@ -0,0 +1,107 @@ +## 📋 FLUTTER DEVELOPMENT SETUP CHECKLIST + +Sebelum menjalankan `flutter run`, pastikan semua ini sudah dilakukan: + +### ✅ BACKEND SETUP + +- [ ] **Jalankan Backend dengan Network Access** + ```bash + # Pilih salah satu: + # Option 1: Pakai script (RECOMMENDED) + cd c:\laragon\www\TA\spk_kontrakan + start start-backend-network.bat + + # Option 2: Manual command + php artisan serve --host=0.0.0.0 --port=8000 + ``` + + Expected output: + ``` + Starting Laravel development server: http://0.0.0.0:8000 + ``` + +- [ ] **Verifikasi Port 8000 Running** + ```bash + netstat -ano | findstr :8000 + # Harusnya ada: TCP 0.0.0.0:8000 LISTENING + ``` + +### 🛡️ FIREWALL SETUP + +- [ ] **Allow Port 8000 di Windows Firewall** + 1. Buka "Windows Defender Firewall with Advanced Security" + 2. Klik "Inbound Rules" → "New Rule" + 3. Port → Specific port: 8000 → Allow + 4. Atau: Allow app "php.exe" melalui firewall + +### 📱 DEVICE SETUP + +- [ ] **Device Terhubung ke Network Yang Sama** + - Device USB atau Emulator terhubung ke WiFi/network sama dengan komputer + +- [ ] **Cek IP Komputer** + ```bash + ipconfig | findstr IPv4 + # Catat IP yang dimulai dengan 192.168.x.x + ``` + +### 🔧 FLUTTER CONFIG + +- [ ] **Update app_config.dart dengan IP yang Benar** + ```dart + // File: lib/config/app_config.dart + static const String baseUrl = 'http://[YOUR-IP]:8000/api'; + static const String storageUrl = 'http://[YOUR-IP]:8000/storage'; + ``` + +### 🚀 FLUTTER RUN + +- [ ] **Clean & Run** + ```bash + cd c:\laragon\www\TA\spk_mobile + flutter clean + flutter run + ``` + +--- + +## 🆘 TROUBLESHOOTING + +### ❌ "TimeoutException" - Tidak Bisa Terhubung ke Backend + +**Checklist:** +1. ✅ Apakah backend running? `netstat -ano | findstr :8000` +2. ✅ Apakah firewall allow port 8000? +3. ✅ Apakah device satu network? Ping ke IP: + ```bash + ping 192.168.18.16 + ``` +4. ✅ Apakah IP di app_config.dart sesuai? +5. ✅ Coba akses via browser dulu: `http://192.168.18.16:8000` + +### ✅ Akses OK di Browser tapi Flutter Gagal + +- Kemungkinan: CORS issu atau Android Network Security +- Solusi: Cek di backend apakah CORS sudah enabled + +### 🚫 "Connection Refused" + +- Backend tidak running +- Solusi: Jalankan `start-backend-network.bat` terlebih dahulu + +--- + +## 💡 BEST PRACTICES + +1. **Selalu Jalankan Backend Terlebih Dahulu** + - Backend harus ready sebelum Flutter app Connect + +2. **Simpan IP di Environment Variable (tidak hardcode)** + - Sudah tersedia di `environment.dart` + +3. **Gunakan Script start-backend-network.bat** + - Lebih mudah dari mengetik command panjang + +4. **Test dengan Browser Dulu** + - Akses `http://192.168.18.16:8000/api/kontrakan` + - Harus return JSON jika API berjalan diff --git a/spk_kontrakan/app/Http/Controllers/AdminAuthController.php b/spk_kontrakan/app/Http/Controllers/AdminAuthController.php index ad475b4..4e9a25a 100644 --- a/spk_kontrakan/app/Http/Controllers/AdminAuthController.php +++ b/spk_kontrakan/app/Http/Controllers/AdminAuthController.php @@ -25,6 +25,14 @@ public function login(Request $request) // FIXED: Hapus guard('admin'), pakai default Auth if (Auth::attempt($credentials)) { + // Cek role - hanya admin dan super_admin yang boleh login + $user = Auth::user(); + if (!in_array($user->role, ['admin', 'super_admin'])) { + Auth::logout(); + $request->session()->invalidate(); + return back()->with('error', 'Akses ditolak. Halaman ini khusus untuk pemilik bisnis.'); + } + $request->session()->regenerate(); return redirect()->intended(route('dashboard')); } diff --git a/spk_kontrakan/app/Http/Controllers/Api/FavoriteController.php b/spk_kontrakan/app/Http/Controllers/Api/FavoriteController.php index e38ce11..d5de920 100644 --- a/spk_kontrakan/app/Http/Controllers/Api/FavoriteController.php +++ b/spk_kontrakan/app/Http/Controllers/Api/FavoriteController.php @@ -11,18 +11,31 @@ class FavoriteController extends Controller { /** - * List favorites user + * List favorites user — separated by type */ public function index(Request $request) { - $favorites = Favorite::with(['favoritable']) - ->where('user_id', $request->user()->id) - ->orderBy('created_at', 'desc') - ->get(); + $userId = $request->user()->id; + + $kontrakanIds = Favorite::where('user_id', $userId) + ->where('type', 'kontrakan') + ->pluck('item_id') + ->toArray(); + + $laundryIds = Favorite::where('user_id', $userId) + ->where('type', 'laundry') + ->pluck('item_id') + ->toArray(); + + $kontrakanList = Kontrakan::whereIn('id', $kontrakanIds)->get(); + $laundryList = Laundry::whereIn('id', $laundryIds)->get(); return response()->json([ 'success' => true, - 'data' => $favorites + 'data' => [ + 'kontrakan' => $kontrakanList, + 'laundry' => $laundryList, + ], ], 200); } @@ -41,8 +54,8 @@ public function toggleKontrakan(Request $request, $id) } $favorite = Favorite::where('user_id', $request->user()->id) - ->where('favoritable_type', Kontrakan::class) - ->where('favoritable_id', $id) + ->where('type', 'kontrakan') + ->where('item_id', $id) ->first(); if ($favorite) { @@ -56,17 +69,16 @@ public function toggleKontrakan(Request $request, $id) ], 200); } else { // Add to favorites - $favorite = Favorite::create([ + Favorite::create([ 'user_id' => $request->user()->id, - 'favoritable_type' => Kontrakan::class, - 'favoritable_id' => $id, + 'type' => 'kontrakan', + 'item_id' => $id, ]); return response()->json([ 'success' => true, 'message' => 'Kontrakan ditambahkan ke favorit', 'is_favorited' => true, - 'data' => $favorite ], 201); } } @@ -86,8 +98,8 @@ public function toggleLaundry(Request $request, $id) } $favorite = Favorite::where('user_id', $request->user()->id) - ->where('favoritable_type', Laundry::class) - ->where('favoritable_id', $id) + ->where('type', 'laundry') + ->where('item_id', $id) ->first(); if ($favorite) { @@ -101,17 +113,16 @@ public function toggleLaundry(Request $request, $id) ], 200); } else { // Add to favorites - $favorite = Favorite::create([ + Favorite::create([ 'user_id' => $request->user()->id, - 'favoritable_type' => Laundry::class, - 'favoritable_id' => $id, + 'type' => 'laundry', + 'item_id' => $id, ]); return response()->json([ 'success' => true, 'message' => 'Laundry ditambahkan ke favorit', 'is_favorited' => true, - 'data' => $favorite ], 201); } } diff --git a/spk_kontrakan/app/Http/Controllers/BackupController.php b/spk_kontrakan/app/Http/Controllers/BackupController.php index 8c53295..de0473d 100644 --- a/spk_kontrakan/app/Http/Controllers/BackupController.php +++ b/spk_kontrakan/app/Http/Controllers/BackupController.php @@ -54,11 +54,11 @@ public function create(Request $request) $timestamp = now()->format('Y-m-d-H-i-s'); $backupFile = $this->backupPath . "/backup_{$timestamp}.sql"; - // Get database credentials - $database = env('DB_DATABASE'); - $username = env('DB_USERNAME'); - $password = env('DB_PASSWORD'); - $host = env('DB_HOST'); + // Get database credentials (use config() instead of env() for config:cache compatibility) + $database = config('database.connections.mysql.database'); + $username = config('database.connections.mysql.username'); + $password = config('database.connections.mysql.password'); + $host = config('database.connections.mysql.host'); // Create SQL dump (Windows MySQL) $command = sprintf( @@ -98,6 +98,8 @@ public function create(Request $request) public function download($backup) { + // Sanitize: prevent path traversal + $backup = basename($backup); $backupPath = $this->backupPath . '/' . $backup; if (!File::exists($backupPath)) { @@ -110,6 +112,8 @@ public function download($backup) public function delete($backup) { try { + // Sanitize: prevent path traversal + $backup = basename($backup); $backupPath = $this->backupPath . '/' . $backup; if (!File::exists($backupPath)) { @@ -127,6 +131,8 @@ public function delete($backup) public function restore(Request $request, $backup) { try { + // Sanitize: prevent path traversal + $backup = basename($backup); $backupPath = $this->backupPath . '/' . $backup; if (!File::exists($backupPath)) { @@ -154,11 +160,11 @@ public function restore(Request $request, $backup) $sqlFile = $backupPath; } - // Restore database - $database = env('DB_DATABASE'); - $username = env('DB_USERNAME'); - $password = env('DB_PASSWORD'); - $host = env('DB_HOST'); + // Restore database (use config() instead of env() for config:cache compatibility) + $database = config('database.connections.mysql.database'); + $username = config('database.connections.mysql.username'); + $password = config('database.connections.mysql.password'); + $host = config('database.connections.mysql.host'); $command = sprintf( 'mysql --user=%s --password=%s --host=%s %s < "%s"', diff --git a/spk_kontrakan/app/Http/Controllers/DashboardController.php b/spk_kontrakan/app/Http/Controllers/DashboardController.php index 1945cfd..02d5222 100644 --- a/spk_kontrakan/app/Http/Controllers/DashboardController.php +++ b/spk_kontrakan/app/Http/Controllers/DashboardController.php @@ -29,7 +29,7 @@ public function index() // ========== DATA TERBARU (No Cache) ========== $recentKontrakan = Kontrakan::latest() - ->select('id', 'nama', 'alamat', 'harga', 'jarak', 'luas', 'created_at') // Only needed columns + ->select('id', 'nama', 'alamat', 'harga', 'jarak', 'jumlah_kamar', 'created_at') // Only needed columns ->take(5) ->get(); @@ -86,15 +86,15 @@ public function index() ->selectRaw(' AVG(harga) as avg_harga, AVG(jarak) as avg_jarak, - AVG(luas) as avg_luas, + AVG(jumlah_kamar) as avg_kamar, MIN(harga) as min_harga, MAX(harga) as max_harga ') ->first(); - // 5. Top Kontrakan by Luas - $topKontrakan = Kontrakan::select('nama', 'harga', 'luas', 'jarak') - ->orderBy('luas', 'desc') + // 5. Top Kontrakan by Harga + $topKontrakan = Kontrakan::select('nama', 'harga', 'jumlah_kamar', 'jarak') + ->orderBy('harga', 'desc') ->take(5) ->get(); @@ -136,7 +136,7 @@ public function index() ], 'avgHargaKontrakan' => $kontrakanStats->avg_harga ?? 0, 'avgJarakKontrakan' => $kontrakanStats->avg_jarak ?? 0, - 'avgLuasKontrakan' => $kontrakanStats->avg_luas ?? 0, + 'avgKamarKontrakan' => $kontrakanStats->avg_kamar ?? 0, 'minHargaKontrakan' => $kontrakanStats->min_harga ?? 0, 'maxHargaKontrakan' => $kontrakanStats->max_harga ?? 0, 'topKontrakan' => $topKontrakan, diff --git a/spk_kontrakan/app/Http/Controllers/ExportController.php b/spk_kontrakan/app/Http/Controllers/ExportController.php index 99558b8..1cb238f 100644 --- a/spk_kontrakan/app/Http/Controllers/ExportController.php +++ b/spk_kontrakan/app/Http/Controllers/ExportController.php @@ -176,20 +176,20 @@ public function laundryExcel(Request $request) } // Filter harga - if ($request->filled('harga_min')) { + if ($request->filled('harga_min') || $request->filled('harga_max')) { $query->whereHas('layanan', function($q) use ($request) { - $q->where('harga', '>=', $request->harga_min); - }); - } - if ($request->filled('harga_max')) { - $query->whereHas('layanan', function($q) use ($request) { - $q->where('harga', '<=', $request->harga_max); + if ($request->filled('harga_min')) { + $q->where('harga', '>=', $request->harga_min); + } + if ($request->filled('harga_max')) { + $q->where('harga', '<=', $request->harga_max); + } }); } // Filter jarak - if ($request->filled('jarak')) { - $jarakMeter = $request->jarak * 1000; + if ($request->filled('jarak_max')) { + $jarakMeter = $request->jarak_max * 1000; $query->where('jarak', '<=', $jarakMeter); } @@ -254,12 +254,16 @@ public function laundryPDF(Request $request) }); } - // Filter harga - if ($request->filled('harga_min')) { - $query->where('harga', '>=', $request->harga_min); - } - if ($request->filled('harga_max')) { - $query->where('harga', '<=', $request->harga_max); + // Filter harga (harga ada di tabel layanan_laundry, bukan laundry) + if ($request->filled('harga_min') || $request->filled('harga_max')) { + $query->whereHas('layanan', function($q) use ($request) { + if ($request->filled('harga_min')) { + $q->where('harga', '>=', $request->harga_min); + } + if ($request->filled('harga_max')) { + $q->where('harga', '<=', $request->harga_max); + } + }); } $laundry = $query->get(); diff --git a/spk_kontrakan/app/Http/Controllers/GaleriController.php b/spk_kontrakan/app/Http/Controllers/GaleriController.php index b660f9e..2ab2719 100644 --- a/spk_kontrakan/app/Http/Controllers/GaleriController.php +++ b/spk_kontrakan/app/Http/Controllers/GaleriController.php @@ -106,6 +106,11 @@ public function setPrimaryKontrakan($id) { $galeri = Galeri::findOrFail($id); + // Pastikan galeri ini memang bertipe kontrakan + if ($galeri->type !== 'kontrakan') { + return back()->with('error', 'Foto ini bukan milik kontrakan'); + } + // Reset semua foto di kontrakan yang sama jadi bukan primary Galeri::where('type', 'kontrakan') ->where('item_id', $galeri->item_id) @@ -124,6 +129,11 @@ public function setPrimaryLaundry($id) { $galeri = Galeri::findOrFail($id); + // Pastikan galeri ini memang bertipe laundry + if ($galeri->type !== 'laundry') { + return back()->with('error', 'Foto ini bukan milik laundry'); + } + // Reset semua foto di laundry yang sama jadi bukan primary Galeri::where('type', 'laundry') ->where('item_id', $galeri->item_id) diff --git a/spk_kontrakan/app/Http/Controllers/KontrakanController.php b/spk_kontrakan/app/Http/Controllers/KontrakanController.php index 3b582cc..73356ea 100644 --- a/spk_kontrakan/app/Http/Controllers/KontrakanController.php +++ b/spk_kontrakan/app/Http/Controllers/KontrakanController.php @@ -223,7 +223,7 @@ public function store(Request $request) 'jarak' => $request->jarak, 'fasilitas' => $request->fasilitas, 'jumlah_kamar' => $request->jumlah_kamar, - 'luas' => $request->luas ?? 0, // Default 0 jika tidak diisi + 'bathroom_count' => $request->bathroom_count ?? 1, 'foto' => $filename, ]); @@ -333,7 +333,7 @@ public function update(Request $request, $id) 'jarak' => $request->jarak, 'fasilitas' => $request->fasilitas, 'jumlah_kamar' => $request->jumlah_kamar, - 'luas' => $request->luas ?? $kontrakan->luas ?? 0, // Gunakan nilai lama jika tidak diisi + 'bathroom_count' => $request->bathroom_count ?? $kontrakan->bathroom_count ?? 1, 'foto' => $filename, ]); diff --git a/spk_kontrakan/app/Http/Controllers/KriteriaController.php b/spk_kontrakan/app/Http/Controllers/KriteriaController.php index 162b141..09c5d46 100644 --- a/spk_kontrakan/app/Http/Controllers/KriteriaController.php +++ b/spk_kontrakan/app/Http/Controllers/KriteriaController.php @@ -112,7 +112,7 @@ public function store(Request $request) 'tipe' => 'required|in:Benefit,Cost', ]); - Kriteria::create($request->all()); + Kriteria::create($request->only(['tipe_bisnis', 'nama_kriteria', 'bobot', 'tipe'])); // Redirect dengan parameter filter return redirect() @@ -139,7 +139,7 @@ public function update(Request $request, Kriteria $kriterium) 'tipe' => 'required|in:Benefit,Cost', ]); - $kriterium->update($request->all()); + $kriterium->update($request->only(['tipe_bisnis', 'nama_kriteria', 'bobot', 'tipe'])); // Redirect dengan parameter filter return redirect() diff --git a/spk_kontrakan/app/Http/Controllers/LaundryController.php b/spk_kontrakan/app/Http/Controllers/LaundryController.php index 8250829..cffd321 100644 --- a/spk_kontrakan/app/Http/Controllers/LaundryController.php +++ b/spk_kontrakan/app/Http/Controllers/LaundryController.php @@ -36,15 +36,14 @@ public function index(Request $request) } // ========== FILTER: RANGE HARGA (Min & Max dengan Slider) ========== - if ($request->filled('harga_min')) { + if ($request->filled('harga_min') || $request->filled('harga_max')) { $query->whereHas('layanan', function($q) use ($request) { - $q->where('harga', '>=', $request->harga_min); - }); - } - - if ($request->filled('harga_max')) { - $query->whereHas('layanan', function($q) use ($request) { - $q->where('harga', '<=', $request->harga_max); + if ($request->filled('harga_min')) { + $q->where('harga', '>=', $request->harga_min); + } + if ($request->filled('harga_max')) { + $q->where('harga', '<=', $request->harga_max); + } }); } diff --git a/spk_kontrakan/app/Http/Controllers/ReviewController.php b/spk_kontrakan/app/Http/Controllers/ReviewController.php index 5c19268..4411110 100644 --- a/spk_kontrakan/app/Http/Controllers/ReviewController.php +++ b/spk_kontrakan/app/Http/Controllers/ReviewController.php @@ -149,8 +149,8 @@ public function destroy($id) { $review = Review::findOrFail($id); - // Cek apakah user adalah pemilik review atau admin - if ($review->user_id !== Auth::id() && Auth::user()->role !== 'admin') { + // Cek apakah user adalah pemilik review atau admin/super_admin + if ($review->user_id !== Auth::id() && !in_array(Auth::user()->role, ['admin', 'super_admin'])) { return back()->with('error', 'Anda tidak memiliki akses untuk menghapus review ini'); } diff --git a/spk_kontrakan/app/Http/Controllers/SAWController.php b/spk_kontrakan/app/Http/Controllers/SAWController.php index f47e083..7273c70 100644 --- a/spk_kontrakan/app/Http/Controllers/SAWController.php +++ b/spk_kontrakan/app/Http/Controllers/SAWController.php @@ -222,10 +222,7 @@ private function processData($data, $tipe, $jenisLayanan, $refLat, $refLng) } $item->harga_value = $layanan->harga ?? 0; - $item->kecepatan_value = $this->convertToHours( - $layanan->kecepatan ?? 0, - $layanan->satuan_kecepatan ?? 'jam' - ); + $item->kecepatan_value = $layanan->estimasi_selesai ?? 0; // sudah dalam satuan jam // LAUNDRY: Hitung jarak dari LOKASI USER if ($item->latitude && $item->longitude) { @@ -389,20 +386,4 @@ private function normalize($nilai, $maxMin, $tipe) } } - // Convert kecepatan ke jam - private function convertToHours($kecepatan, $satuan) - { - try { - $kecepatan = floatval($kecepatan); - - if ($satuan == 'hari') { - return $kecepatan * 24; - } - return $kecepatan; - - } catch (Exception $e) { - Log::error('Error convertToHours: ' . $e->getMessage()); - return 0; - } - } } \ No newline at end of file diff --git a/spk_kontrakan/app/Http/Controllers/UserManagementController.php b/spk_kontrakan/app/Http/Controllers/UserManagementController.php index 2b51d9b..68ed274 100644 --- a/spk_kontrakan/app/Http/Controllers/UserManagementController.php +++ b/spk_kontrakan/app/Http/Controllers/UserManagementController.php @@ -33,7 +33,7 @@ public function index(Request $request) if ($request->status === 'active') { $query->whereNull('deleted_at'); } else { - $query->whereNotNull('deleted_at'); + $query->onlyTrashed(); } } @@ -91,15 +91,17 @@ public function update(Request $request, User $user) $oldValues = $user->toArray(); - if ($request->filled('password')) { - $user->password = Hash::make($request->password); - } - - $user->update([ + $updateData = [ 'name' => $validated['name'], 'email' => $validated['email'], 'role' => $validated['role'], - ]); + ]; + + if ($request->filled('password')) { + $updateData['password'] = Hash::make($request->password); + } + + $user->update($updateData); ActivityLog::log('update', "Memperbarui user: {$user->name}", 'User', $user->id, $oldValues, $user->toArray()); diff --git a/spk_kontrakan/app/Http/Middleware/AdminAuth.php b/spk_kontrakan/app/Http/Middleware/AdminAuth.php index 8e420af..094fc43 100644 --- a/spk_kontrakan/app/Http/Middleware/AdminAuth.php +++ b/spk_kontrakan/app/Http/Middleware/AdminAuth.php @@ -9,7 +9,7 @@ class AdminAuth { public function handle($request, Closure $next) { - if (! Auth::guard('admin')->check()) { + if (! Auth::check()) { return redirect()->route('admin.login'); } diff --git a/spk_kontrakan/app/Models/ActivityLog.php b/spk_kontrakan/app/Models/ActivityLog.php index a62c2e5..c3e96b5 100644 --- a/spk_kontrakan/app/Models/ActivityLog.php +++ b/spk_kontrakan/app/Models/ActivityLog.php @@ -146,13 +146,13 @@ public static function archiveOldLogs($keepDays = 365) // Dashboard Statistics public static function getSummaryStats($userId = null) { - $query = $userId ? self::where('user_id', $userId) : self::query(); + $baseQuery = $userId ? self::where('user_id', $userId) : self::query(); return [ - 'total_actions' => $query->count(), - 'today_actions' => $query->whereDate('created_at', today())->count(), - 'this_week_actions' => $query->where('created_at', '>=', now()->startOfWeek())->count(), - 'this_month_actions' => $query->whereMonth('created_at', now()->month)->count(), + 'total_actions' => (clone $baseQuery)->count(), + 'today_actions' => (clone $baseQuery)->whereDate('created_at', today())->count(), + 'this_week_actions' => (clone $baseQuery)->where('created_at', '>=', now()->startOfWeek())->count(), + 'this_month_actions' => (clone $baseQuery)->whereMonth('created_at', now()->month)->count(), 'most_common_action' => self::select('action') ->groupBy('action') ->orderByRaw('count(*) desc') @@ -162,7 +162,7 @@ public static function getSummaryStats($userId = null) ->groupBy('action') ->orderByRaw('count(*) desc') ->pluck('count', 'action'), - 'recent_activity' => $query->with('user') + 'recent_activity' => (clone $baseQuery)->with('user') ->latest() ->limit(10) ->get() diff --git a/spk_kontrakan/app/Models/Galeri.php b/spk_kontrakan/app/Models/Galeri.php index 9d89306..4ce8fc9 100644 --- a/spk_kontrakan/app/Models/Galeri.php +++ b/spk_kontrakan/app/Models/Galeri.php @@ -30,7 +30,7 @@ class Galeri extends Model */ public function kontrakan() { - return $this->belongsTo(Kontrakan::class, 'item_id')->where('type', 'kontrakan'); + return $this->belongsTo(Kontrakan::class, 'item_id'); } /** @@ -38,7 +38,7 @@ public function kontrakan() */ public function laundry() { - return $this->belongsTo(Laundry::class, 'item_id')->where('type', 'laundry'); + return $this->belongsTo(Laundry::class, 'item_id'); } /** diff --git a/spk_kontrakan/app/Models/Review.php b/spk_kontrakan/app/Models/Review.php index 2ca0a04..8a46906 100644 --- a/spk_kontrakan/app/Models/Review.php +++ b/spk_kontrakan/app/Models/Review.php @@ -34,7 +34,7 @@ public function user() */ public function kontrakan() { - return $this->belongsTo(Kontrakan::class, 'item_id')->where('type', 'kontrakan'); + return $this->belongsTo(Kontrakan::class, 'item_id'); } /** @@ -42,7 +42,7 @@ public function kontrakan() */ public function laundry() { - return $this->belongsTo(Laundry::class, 'item_id')->where('type', 'laundry'); + return $this->belongsTo(Laundry::class, 'item_id'); } /** diff --git a/spk_kontrakan/app/Models/User.php b/spk_kontrakan/app/Models/User.php index 1597699..ec4c1cb 100644 --- a/spk_kontrakan/app/Models/User.php +++ b/spk_kontrakan/app/Models/User.php @@ -97,4 +97,28 @@ public function activityLogs() { return $this->hasMany(ActivityLog::class); } + + /** + * Relationship ke Booking + */ + public function bookings() + { + return $this->hasMany(Booking::class); + } + + /** + * Relationship ke Review + */ + public function reviews() + { + return $this->hasMany(Review::class); + } + + /** + * Relationship ke Favorite + */ + public function favorites() + { + return $this->hasMany(Favorite::class); + } } \ No newline at end of file diff --git a/spk_kontrakan/public/uploads/Kontrakan/1772135532_69a0a46c03fc2.png b/spk_kontrakan/public/uploads/Kontrakan/1772135532_69a0a46c03fc2.png new file mode 100644 index 0000000000000000000000000000000000000000..615d2c235c86999cdd21ede2d2cbb6ff0722e1fe GIT binary patch literal 99119 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 literal 0 HcmV?d00001 diff --git a/spk_kontrakan/public/uploads/Kontrakan/1772137717_69a0acf58a28e.png b/spk_kontrakan/public/uploads/Kontrakan/1772137717_69a0acf58a28e.png new file mode 100644 index 0000000000000000000000000000000000000000..78e15265a208fe1d5fe29fe98968305ebc2411fc GIT binary patch literal 109528 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 literal 0 HcmV?d00001 diff --git a/spk_kontrakan/public/uploads/Kontrakan/1772137812_69a0ad54559b7.png b/spk_kontrakan/public/uploads/Kontrakan/1772137812_69a0ad54559b7.png new file mode 100644 index 0000000000000000000000000000000000000000..78e15265a208fe1d5fe29fe98968305ebc2411fc GIT binary patch literal 109528 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 literal 0 HcmV?d00001 diff --git a/spk_kontrakan/public/uploads/galeri/kontrakan/1772137680_69a0acd03b536.png b/spk_kontrakan/public/uploads/galeri/kontrakan/1772137680_69a0acd03b536.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b1a5dd13b6f9a11a337683bbe07146f1539ce1 GIT binary patch literal 81406 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 z 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

R3y6uCJ@GV?lzL(y9 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 F{{W_5Q#Swr literal 0 HcmV?d00001 diff --git a/spk_kontrakan/resources/views/Kontrakan/create.blade.php b/spk_kontrakan/resources/views/Kontrakan/create.blade.php index 7b1e091..b1f879b 100644 --- a/spk_kontrakan/resources/views/Kontrakan/create.blade.php +++ b/spk_kontrakan/resources/views/Kontrakan/create.blade.php @@ -416,10 +416,6 @@ class="form-control border-start-0 @error('jumlah_kamar') is-invalid @enderror" Jumlah kamar tidur yang tersedia - - Total kamar mandi (sistem akan otomatis menghitung kenyamanan) - -

- -
-
-
- -
-
- Luas Bangunan -
- {{ $kontrakan->luas }} m² -
-
-
-
-
@@ -728,8 +713,8 @@ class="btn btn-light w-100 fw-semibold" Rp {{ number_format($kontrakan->harga / 12, 0, ',', '.') }}
- Harga/m² - Rp {{ number_format($kontrakan->harga / $kontrakan->jumlah_kamar, 0, ',', '.') }} + Harga/Kamar + Rp {{ number_format($kontrakan->jumlah_kamar > 0 ? $kontrakan->harga / $kontrakan->jumlah_kamar : 0, 0, ',', '.') }}
Status diff --git a/spk_kontrakan/resources/views/Laundry/edit.blade.php b/spk_kontrakan/resources/views/Laundry/edit.blade.php index ee0a056..f942da0 100644 --- a/spk_kontrakan/resources/views/Laundry/edit.blade.php +++ b/spk_kontrakan/resources/views/Laundry/edit.blade.php @@ -512,22 +512,41 @@ class="form-control"
-
- - -
+ +
+ +
+ + +
+ +
+ +
diff --git a/spk_kontrakan/resources/views/Laundry/show.blade.php b/spk_kontrakan/resources/views/Laundry/show.blade.php index 3abea36..577b17a 100644 --- a/spk_kontrakan/resources/views/Laundry/show.blade.php +++ b/spk_kontrakan/resources/views/Laundry/show.blade.php @@ -113,7 +113,7 @@
{{ $laundry->nama }} - - - + + + @@ -242,7 +242,7 @@ class="btn btn-sm btn-danger"> @@ -318,7 +318,7 @@ class="btn btn-sm btn-danger"> @endif
Status - Buka + {{ ($laundry->status ?? 'buka') === 'buka' ? 'Buka' : 'Tutup' }}
Kategori diff --git a/spk_kontrakan/resources/views/Layouts/admin.blade.php b/spk_kontrakan/resources/views/Layouts/admin.blade.php index 0e796e2..7794d8b 100644 --- a/spk_kontrakan/resources/views/Layouts/admin.blade.php +++ b/spk_kontrakan/resources/views/Layouts/admin.blade.php @@ -54,6 +54,21 @@ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + + /* Shared color variables for views */ + --primary-color: #667eea; + --primary-color-rgb: 102, 126, 234; + --secondary-color: #764ba2; + --secondary-color-rgb: 118, 75, 162; + --info-color: #17a2b8; + --info-color-rgb: 23, 162, 184; + --success-color: #28a745; + --success-color-rgb: 40, 167, 69; + --warning-color: #ffc107; + --warning-color-rgb: 255, 193, 7; + --danger-color: #dc3545; + --danger-color-rgb: 220, 53, 69; + --text-muted: #6c757d; } * { diff --git a/spk_kontrakan/resources/views/SAW/hasil.blade.php b/spk_kontrakan/resources/views/SAW/hasil.blade.php index 38fe2a0..86b3f91 100644 --- a/spk_kontrakan/resources/views/SAW/hasil.blade.php +++ b/spk_kontrakan/resources/views/SAW/hasil.blade.php @@ -1036,7 +1036,6 @@ class="btn btn-sm btn-success rounded-pill px-3 py-1"
Rekomendasi Terbaik
-
@if(count($hasil) > 0) @if(isset($hasil[0]['foto']) && $hasil[0]['foto']) diff --git a/spk_kontrakan/resources/views/auth/admin-login.blade.php b/spk_kontrakan/resources/views/auth/admin-login.blade.php index ba014f1..5141d76 100644 --- a/spk_kontrakan/resources/views/auth/admin-login.blade.php +++ b/spk_kontrakan/resources/views/auth/admin-login.blade.php @@ -173,7 +173,6 @@
diff --git a/spk_kontrakan/resources/views/auth/admin-register.blade.php b/spk_kontrakan/resources/views/auth/admin-register.blade.php index f5a96e5..a6cdd03 100644 --- a/spk_kontrakan/resources/views/auth/admin-register.blade.php +++ b/spk_kontrakan/resources/views/auth/admin-register.blade.php @@ -31,7 +31,7 @@ } .auth-header { - background: linear-gradient(135deg, #28a745 0%, #20c997 100%); + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px 20px; text-align: center; @@ -197,7 +197,6 @@ diff --git a/spk_kontrakan/resources/views/favorites/index.blade.php b/spk_kontrakan/resources/views/favorites/index.blade.php index 0c72280..1429b75 100644 --- a/spk_kontrakan/resources/views/favorites/index.blade.php +++ b/spk_kontrakan/resources/views/favorites/index.blade.php @@ -567,7 +567,7 @@ @endif @else @if($item->foto) - {{ $item->nama }} + {{ $item->nama }} @else {{ $item->nama }} @endif diff --git a/spk_kontrakan/routes/web.php b/spk_kontrakan/routes/web.php index 319a55d..02e4bd6 100644 --- a/spk_kontrakan/routes/web.php +++ b/spk_kontrakan/routes/web.php @@ -17,35 +17,15 @@ use App\Http\Controllers\BookingController; // ← BOOKING SYSTEM (ADMIN) // ------------------------------------------------- -// LANDING PAGE - Redirect ke Admin Portal +// LANDING PAGE - Langsung ke Login // ------------------------------------------------- Route::get('/', function () { - return redirect()->route('admin.portal'); + return redirect()->route('admin.login'); })->name('welcome'); -// ------------------------------------------------- -// ADMIN PORTAL - Landing page khusus untuk pemilik/admin -// ------------------------------------------------- -Route::get('/admin-portal', function () { - // Hitung statistik real-time - $totalAdmins = \App\Models\User::where('role', 'admin')->count(); - $totalKontrakan = \App\Models\Kontrakan::count(); - $totalLaundry = \App\Models\Laundry::count(); - $totalProperti = $totalKontrakan + $totalLaundry; - $totalBookings = \App\Models\Booking::where('status', 'confirmed')->count(); - $avgRating = \App\Models\Review::avg('rating') ?? 4.8; - - return view('admin-portal', [ - 'totalAdmins' => $totalAdmins, - 'totalProperti' => $totalProperti, - 'totalBookings' => $totalBookings, - 'avgRating' => round($avgRating, 1) - ]); -})->name('admin.portal'); - // Shortcut URL - lebih mudah diingat Route::get('/pemilik', function () { - return redirect()->route('admin.portal'); + return redirect()->route('admin.login'); }); // ------------------------------------------------- @@ -85,15 +65,15 @@ // ========== 🆕 ACTIVITY LOG ROUTES ========== Route::prefix('admin')->name('admin.')->group(function () { - Route::resource('activity-logs', ActivityLogController::class)->only(['index', 'show']); Route::get('/activity-logs/export', [ActivityLogController::class, 'export'])->name('activity-logs.export'); Route::post('/activity-logs/clear', [ActivityLogController::class, 'clear'])->name('activity-logs.clear'); + Route::resource('activity-logs', ActivityLogController::class)->only(['index', 'show']); }); // ========== 🆕 USER MANAGEMENT ROUTES ========== Route::prefix('admin')->name('admin.')->group(function () { Route::resource('users', UserManagementController::class); - Route::post('/users/{user}/restore', [UserManagementController::class, 'restore'])->name('users.restore'); + Route::post('/users/{user}/restore', [UserManagementController::class, 'restore'])->name('users.restore')->withTrashed(); Route::post('/users/bulk-delete', [UserManagementController::class, 'bulkDelete'])->name('users.bulk-delete'); }); @@ -186,7 +166,7 @@ }); // Legacy favorite routes (untuk kompatibilitas) - Route::post('/favorite', [FavoriteController::class, 'toggleOld'])->name('favorite.toggle'); + Route::post('/favorite/{type}/{id}', [FavoriteController::class, 'toggle'])->name('favorite.toggle'); Route::post('/admin/logout', [AdminAuthController::class, 'logout'])->name('admin.logout'); }); \ No newline at end of file diff --git a/spk_kontrakan/start-backend-network.bat b/spk_kontrakan/start-backend-network.bat new file mode 100644 index 0000000..d29a7e5 --- /dev/null +++ b/spk_kontrakan/start-backend-network.bat @@ -0,0 +1,42 @@ +@echo off +REM ============================================================================ +REM Script untuk memulai Laravel Backend dengan Network Access +REM Tujuan: Agar Flutter Mobile Device bisa terhubung dari network +REM ============================================================================ + +cls +echo. +echo ╔════════════════════════════════════════════════════════╗ +echo ║ 🚀 SPK Backend - Network Accessible Mode ║ +echo ╚════════════════════════════════════════════════════════╝ +echo. + +REM Dapatkan IP address komputer +echo Mendeteksi IP Address komputer... +for /f "tokens=2 delims=:" %%A in ('ipconfig ^| findstr /i "IPv4" ^| findstr /i "192.168"') do set IP=%%A +set IP=%IP: =% + +if "%IP%"=="" ( + echo ❌ ERROR: Tidak bisa menemukan IP Address! + echo Pastikan komputer terhubung ke network. + pause + exit /b 1 +) + +echo ✅ IP Address terdeteksi: %IP% +echo. +echo 📱 Backend akan accessible dari: +echo • Local: http://localhost:8000 +echo • Network: http://%IP%:8000 +echo • API: http://%IP%:8000/api +echo. +echo ⚙️ Starting Laravel Backend... +echo. + +REM Pindah ke directory project +cd /d "%~dp0" + +REM Jalankan Laravel serve dengan host 0.0.0.0 +php artisan serve --host=0.0.0.0 --port=8000 + +pause diff --git a/spk_kontrakan/storage/framework/views/0549a80dc062eecdcc8efbf8312e4fd5.php b/spk_kontrakan/storage/framework/views/0549a80dc062eecdcc8efbf8312e4fd5.php deleted file mode 100644 index bf4c0e6..0000000 --- a/spk_kontrakan/storage/framework/views/0549a80dc062eecdcc8efbf8312e4fd5.php +++ /dev/null @@ -1,1297 +0,0 @@ - - -startSection('title', 'Detail Kontrakan'); ?> - -startSection('content'); ?> -
- - - - - - -
-
-
-

- nama); ?> - - status_label); ?> -

-

Informasi lengkap dan detil kontrakan

-
- -
-
- - - - - - - -
-
-
-
-
-
Update Status Cepat
- Tandai status ketersediaan kontrakan -
-
-
-
- - - - -
- - - - -
- - - - -
- - - - -
-
-
-
-
-
- -
- -
- - foto): ?> -
-
- Foto Kontrakan -
-
-
- <?php echo e($kontrakan->nama); ?> -
- - - Klik foto untuk melihat ukuran penuh - -
-
-
-
- -
-
- Foto Kontrakan -
-
-
-
-
- -
-
- -
-
Foto Tidak Tersedia
-

- - Belum ada foto yang diupload untuk kontrakan ini -

-
-
-
-
- - - -
-
- - Galeri Foto - - -
-
- galeri->count() > 0): ?> -
- galeri; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $foto): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
- Foto <?php echo e($kontrakan->nama); ?> - - is_primary): ?> - - Utama - - - -
-
- is_primary): ?> -
- - - - - -
- - - - -
-
- - - #urutan); ?> - - -
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
- -
Belum ada foto di galeri
-

Upload foto untuk menampilkan galeri

- -
- -
-
- - - - - -
-
-
-
- - Review & Rating - -
-
- average_rating); ?> -
- - average_rating): ?> - - - - - -
-
- (total_reviews); ?> review) -
-
- -
-
-
- reviews->count() > 0): ?> -
- reviews; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $review): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
-
-
- user->name, 0, 1))); ?> - -
-
-
user->name); ?>
- created_at->diffForHumans()); ?> -
-
-
-
- - rating): ?> - - - - - -
- id() === $review->user_id): ?> -
- -
- - - - -
- -
-
- review): ?> -

review); ?>

- -
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
- -
Belum ada review
-

Jadilah yang pertama memberikan review!

-
- -
-
- - - - - - latitude && $kontrakan->longitude): ?> -
-
- - Lokasi di Peta - - - Google Maps - -
-
-
-
-
- - - -
-
- Informasi Utama -
-
-
- -
-
-
- -
-
- Nama Kontrakan -
nama); ?>
-
-
-
- - -
-
-
- -
-
- Alamat Lengkap -

alamat); ?>

-
-
-
- - - no_whatsapp): ?> -
-
-
- -
-
- Kontak WhatsApp -
no_whatsapp); ?>
-
- - Chat WhatsApp - - - Telepon - - -
-
-
-
- - - -
-
-
- -
-
- Harga Sewa/Tahun -
- Rp harga, 0, ',', '.')); ?> - -
-
-
-
- - -
-
-
- -
-
- Luas Bangunan -
- luas); ?> m² -
-
-
-
- - -
-
-
- -
-
- Jumlah Kamar Tidur -
- jumlah_kamar ?? 1); ?> kamar -
-
-
-
- - -
-
-
- -
-
- Jumlah Kamar Mandi -
- bathroom_count ?? 1); ?> kamar -
-
-
-
- - -
-
-
- -
-
- Jarak ke Kampus -
- jarak, 0, ',', '.')); ?> meter -
- jarak / 1000, 2)); ?> km -
-
-
- - -
-
-
- -
-
- Fasilitas - fasilitas): ?> -
- fasilitas); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $fasilitas): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- -

-

- -
-
-
-
-
-
-
- - -
- - no_whatsapp): ?> -
-
-
-
- -
-
Hubungi Pemilik
-

Tanya langsung via WhatsApp

-
-
- Nomor WhatsApp -

no_whatsapp); ?>

-
- - Chat Sekarang - -
-
- - - -
-
-
- Simpan Favorit -
-

- Simpan kontrakan ini ke daftar favorit Anda untuk akses cepat -

- - check() && $kontrakan->isFavoritedBy(auth()->id()); - ?> - -
- - - - - - - total_favorites); ?> orang menyukai ini - -
-
- - -
-
-
- Ringkasan -
-
- Harga/Bulan - Rp harga / 12, 0, ',', '.')); ?> -
-
- Harga/m² - Rp harga / $kontrakan->jumlah_kamar, 0, ',', '.')); ?> -
-
- Status - Tersedia -
-
- Kategori - Kontrakan -
-
-
- - -
-
-
- Riwayat -
-
- Dibuat - created_at->format('d M Y, H:i')); ?> WIB -
- updated_at != $kontrakan->created_at): ?> -
- Terakhir Diupdate - updated_at->format('d M Y, H:i')); ?> WIB - - (updated_at->diffForHumans()); ?>) - -
- -
-
- - -
-
-
- Aksi -
-
- - Edit Data - - - user()->role == 'super_admin'): ?> -
- - - - - - - -
-
-
-
-
-
- - - - - - - - - - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/0bb244dbd77bcee4d52a59bb59147721.php b/spk_kontrakan/storage/framework/views/0bb244dbd77bcee4d52a59bb59147721.php deleted file mode 100644 index 6398fcc..0000000 --- a/spk_kontrakan/storage/framework/views/0bb244dbd77bcee4d52a59bb59147721.php +++ /dev/null @@ -1,117 +0,0 @@ -hasPages()): ?> - - - \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/15adb941f057c688df2ceb4a9c21ef52.php b/spk_kontrakan/storage/framework/views/15adb941f057c688df2ceb4a9c21ef52.php deleted file mode 100644 index 2c2727c..0000000 --- a/spk_kontrakan/storage/framework/views/15adb941f057c688df2ceb4a9c21ef52.php +++ /dev/null @@ -1,163 +0,0 @@ - - -startSection('title', 'Activity Log'); ?> - -startSection('content'); ?> -
- - - -
-

- Activity Log -

-

Riwayat semua aktivitas user dalam sistem

-
- - -
-
-
-
- - -
- -
- - -
- -
- - -
- -
- - - Reset - -
- -
-
- - -
-
-
-
- Daftar Aktivitas (total()); ?>) -
- - Export CSV - -
-
- -
- isEmpty()): ?> -
- -
Tidak ada aktivitas ditemukan
-
- -
-
Jenis LayananHarga/kgKecepatanNama PaketHargaEstimasi Selesai
- {{ ucfirst($layanan->jenis_layanan) }} + {{ $layanan->nama_paket ?? ucfirst($layanan->jenis_layanan ?? '-') }} @@ -252,7 +252,7 @@ class="btn btn-sm btn-danger"> - {{ $layanan->kecepatan }} {{ $layanan->satuan_kecepatan }} + {{ $layanan->estimasi_selesai ? $layanan->estimasi_selesai . ' jam' : '-' }}
- - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $log): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - -
WaktuUserActionDeskripsiModelIP Address
- created_at->format('d M Y H:i')); ?> - - user->name ?? 'Unknown'); ?>
- user->email ?? ''); ?> -
- - action)); ?> - - - - description); ?> - - - model_type): ?> - - model_type); ?> - - model_id): ?> - #model_id); ?> - - - - - - - - - ip_address); ?> -
-
- - - - - -
- links()); ?> - -
- -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/2487b2a216139ea38383fd97d51e2280.php b/spk_kontrakan/storage/framework/views/2487b2a216139ea38383fd97d51e2280.php deleted file mode 100644 index 6d90947..0000000 --- a/spk_kontrakan/storage/framework/views/2487b2a216139ea38383fd97d51e2280.php +++ /dev/null @@ -1,231 +0,0 @@ - - -startSection('title', 'Kelola Booking'); ?> - -startSection('content'); ?> -
- -
-
-

- Kelola Booking -

- -
- - Booking Baru - -
- - - - - - - - - - - -
-
-
-
- - -
-
- - -
-
- - - - -
-
-
-
- - -
- 'pending', 'label' => 'Menunggu', 'color' => 'warning', 'icon' => 'hourglass-split'], - ['status' => 'confirmed', 'label' => 'Dikonfirmasi', 'color' => 'info', 'icon' => 'check-circle'], - ['status' => 'checked_in', 'label' => 'Ditempati', 'color' => 'success', 'icon' => 'house-door'], - ['status' => 'completed', 'label' => 'Selesai', 'color' => 'secondary', 'icon' => 'check-all'], - ]; - ?> - addLoop($__currentLoopData); foreach($__currentLoopData as $stat): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
-
- -

- count()); ?> - -

- -
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- - -
-
-
- - - - - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $booking): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?> - - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?> - - - - - -
IDKontrakanPenyewaPeriodeBiayaStatusPembayaranAksi
- #id); ?> - - - kontrakan->nama ?? '-'); ?> - - - -
tenant_name); ?>
- tenant_phone); ?> -
-
start_date->format('d M Y')); ?>
- s/d end_date->format('d M Y')); ?> -
- duration_days); ?> hari -
- Rp amount, 0, ',', '.')); ?> - - - status_label); ?> - - - - - payment_status_label); ?> - - - payment_proof): ?> - - - - - booking_source == 'user'): ?> - - - - - -
- - - - status == 'pending'): ?> -
- - -
- - status == 'confirmed'): ?> -
- - -
- - status == 'checked_in'): ?> -
- - -
- - user()->role == 'super_admin' || $booking->status == 'pending'): ?> -
- - - -
- -
-
- - Belum ada data booking -
-
-
- hasPages()): ?> - - -
-
-stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/2d5c12915a62c546cdaee770c4190ebb.php b/spk_kontrakan/storage/framework/views/2d5c12915a62c546cdaee770c4190ebb.php deleted file mode 100644 index 1e5b340..0000000 --- a/spk_kontrakan/storage/framework/views/2d5c12915a62c546cdaee770c4190ebb.php +++ /dev/null @@ -1,1495 +0,0 @@ - - -startSection('title', 'Tambah Kontrakan'); ?> - -startSection('content'); ?> -
- - - - - - - - - -
-
-
-
-
- - - -
-
- Informasi Dasar -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Masukkan nama kontrakan yang mudah dikenali -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Alamat lengkap beserta RT/RW jika ada. Alamat akan auto-update saat klik peta. -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - - Format: 08xxx atau 628xxx (untuk kemudahan calon penyewa menghubungi) - -
-
-
- - -
-
- Lokasi & Koordinat -
- - -
-
- -
- ⭐ Cara Menentukan Lokasi (PILIH SALAH SATU): -
    -
  • - 🎯 REKOMENDASI #1: Klik di Peta -
    - Klik pada peta di lokasi kontrakan → Alamat & koordinat otomatis terisi
    - Paling Akurat & Mudah! -
    -
  • -
  • - 📍 Deteksi GPS -
    - Klik "Deteksi Lokasi Saya" HANYA jika Anda sedang berada di lokasi kontrakan -
    -
  • -
  • - ⌨️ Input Manual Koordinat -
    - Ketik latitude & longitude dari Google Maps → Marker otomatis pindah -
    -
  • -
  • - 🔍 Cari dari Alamat -
    - ⚠️ Hanya untuk alamat umum (contoh: "Sumbersari, Jember")
    - ❌ TIDAK untuk nama perumahan/kontrakan spesifik -
    -
  • -
-
- - 💡 Tips: Jika alamat berisi nama perumahan/gang (contoh: "Perumahan Melati, Gang Mawar"), - gunakan cara KLIK PETA atau INPUT KOORDINAT manual, - jangan gunakan tombol "Cari dari Alamat" - -
-
-
-
- - -
-
- - - - Hanya untuk alamat umum (Kota/Kecamatan), bukan nama perumahan! - -
-
- - - Gunakan GPS Anda (harus di lokasi) - -
-
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Range: -90 sampai 90 -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Range: -180 sampai 180 -
- - -
-
- - Klik pada peta → alamat & koordinat otomatis terisi | Drag marker untuk ubah posisi - -
-
-
- - -
-
- Detail Properti -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Harga dalam Rupiah per tahun - -
- - -
- -
- - - - - kamar - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Jumlah kamar tidur yang tersedia -
- - Total kamar mandi (sistem akan otomatis menghitung kenyamanan) - -
- - -
- -
- - - - - meter - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - - Jarak otomatis dihitung dari koordinat kontrakan ke kampus - -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Pisahkan dengan koma (,) untuk fasilitas lebih dari satu -
-
-
- - -
-
- Upload Foto -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Format: JPG, PNG, JPEG. Maksimal 2MB -
- - -
- -
-
-
- - - - - -
- - Batal - - -
- -
-
- - -
-
-
- -
-
-
Tips Pengisian Data:
-
    -
  • Pastikan semua data yang ditandai (*) wajib diisi
  • -
  • CARA TERBAIK: Klik langsung pada peta untuk menentukan lokasi! Alamat akan otomatis terisi.
  • -
  • PENTING: Tombol "Cari dari Alamat" HANYA untuk alamat umum seperti "Jember" atau "Sumbersari", BUKAN untuk nama perumahan spesifik.
  • -
  • Alternatif: Copy koordinat dari Google Maps, lalu ketik manual di form (marker otomatis pindah)
  • -
  • Koordinat bisa input manual, marker otomatis pindah!
  • -
  • Jarak ke kampus akan otomatis dihitung setelah koordinat terisi
  • -
  • Nomor WhatsApp memudahkan calon penyewa untuk menghubungi
  • -
-
-
-
-
-
- - - - - - - - - - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/3e2a756e698ea84296e208d7b9a94af0.php b/spk_kontrakan/storage/framework/views/3e2a756e698ea84296e208d7b9a94af0.php deleted file mode 100644 index 0eafb89..0000000 --- a/spk_kontrakan/storage/framework/views/3e2a756e698ea84296e208d7b9a94af0.php +++ /dev/null @@ -1,427 +0,0 @@ - - -startSection('title', 'Portal Pemilik - Kelola Kontrakan & Laundry Anda'); ?> - -startSection('content'); ?> - - - -
-
- - 🏢 Portal Khusus Pemilik - -

- Kelola Properti Anda
dengan Mudah & Efisien -

-

- Platform manajemen kontrakan dan laundry yang profesional. Pantau bisnis Anda, kelola pemesanan, dan tingkatkan pendapatan dengan sistem yang terintegrasi. -

- -
-
- -
- -
-
-

- Fitur Lengkap untuk Pemilik -

-

- Semua yang Anda butuhkan untuk mengelola bisnis properti Anda -

-
- -
-
-
🏠
-

Manajemen Kontrakan

-

- Kelola data kontrakan, upload foto, atur harga, dan update informasi dengan mudah. Sistem lengkap dengan galeri foto. -

-
- -
-
👕
-

Kelola Laundry

-

- Tambahkan layanan laundry, atur harga per layanan, dan kelola pesanan pelanggan secara real-time. -

-
- -
-
📅
-

Sistem Booking

-

- Pantau pemesanan masuk, konfirmasi booking, dan kelola jadwal ketersediaan properti Anda. -

-
- -
-
-

Review & Rating

-

- Lihat ulasan pelanggan, tingkatkan kualitas layanan, dan bangun reputasi bisnis yang lebih baik. -

-
- -
-
📊
-

Dashboard Analytics

-

- Pantau performa bisnis dengan statistik lengkap, grafik penjualan, dan laporan yang detail. -

-
- -
-
📱
-

Responsive Design

-

- Kelola bisnis dari mana saja, kapan saja. Akses dashboard dari smartphone, tablet, atau komputer. -

-
-
-
- - -
-
-

- Platform Terpercaya -

-

- Bergabunglah dengan pemilik lainnya yang sudah merasakan kemudahan -

-
- -
-
-
+
-
Pemilik Terdaftar
-
-
-
+
-
Properti Dikelola
-
-
-
+
-
Booking Sukses
-
-
-
-
Rating Rata-rata
-
-
-
-
- - -
-
-

Siap Memulai?

-

- Daftar sekarang dan dapatkan akses penuh ke dashboard manajemen properti -

- - Daftar Gratis Sekarang - -
-
- - - -stopSection(); ?> - -make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/585ad336c34df32b9792eabb80ba9a63.php b/spk_kontrakan/storage/framework/views/585ad336c34df32b9792eabb80ba9a63.php deleted file mode 100644 index 43a35e3..0000000 --- a/spk_kontrakan/storage/framework/views/585ad336c34df32b9792eabb80ba9a63.php +++ /dev/null @@ -1,1680 +0,0 @@ - - -startSection('title', 'Edit Kontrakan'); ?> - -startSection('content'); ?> -
- - - - - - - - - -
-
-
-
-
- - - - -
-
- Informasi Dasar -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Masukkan nama kontrakan yang mudah dikenali -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Alamat lengkap beserta RT/RW jika ada. Alamat akan auto-update saat klik peta. -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - - Format: 08xxx atau 628xxx (untuk kemudahan calon penyewa menghubungi) - -
-
-
- - -
-
- Lokasi & Koordinat -
- - -
-
- -
- ⭐ Cara Menentukan Lokasi (PILIH SALAH SATU): -
    -
  • - 🎯 REKOMENDASI #1: Klik di Peta -
    - Klik pada peta di lokasi kontrakan → Alamat & koordinat otomatis terisi
    - Paling Akurat & Mudah! -
    -
  • -
  • - 📍 Deteksi GPS -
    - Klik "Deteksi Lokasi Saya" HANYA jika Anda sedang berada di lokasi kontrakan -
    -
  • -
  • - ⌨️ Input Manual Koordinat -
    - Ketik latitude & longitude dari Google Maps → Marker otomatis pindah -
    -
  • -
  • - 🔍 Cari dari Alamat -
    - ⚠️ Hanya untuk alamat umum (contoh: "Sumbersari, Jember")
    - ❌ TIDAK untuk nama perumahan/kontrakan spesifik -
    -
  • -
-
- - 💡 Tips: Jika alamat berisi nama perumahan/gang (contoh: "Perumahan Melati, Gang Mawar"), - gunakan cara KLIK PETA atau INPUT KOORDINAT manual, - jangan gunakan tombol "Cari dari Alamat" - -
-
-
-
- - -
-
- - - - Hanya untuk alamat umum (Kota/Kecamatan), bukan nama perumahan! - -
-
- - - Gunakan GPS Anda (harus di lokasi) - -
-
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Range: -90 sampai 90 -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Range: -180 sampai 180 -
- - -
-
- - Klik pada peta → alamat & koordinat otomatis terisi | Drag marker untuk ubah posisi - -
-
-
- - -
-
- Detail Properti -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Harga dalam Rupiah per tahun - -
- - -
- -
- - - - - kamar - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Jumlah kamar tidur yang tersedia -
- - -
- -
- - - - - kamar - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Informasi kamar mandi untuk detail kontrakan -
- - -
- -
- - - - - meter - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - - Jarak otomatis dihitung dari koordinat kontrakan ke kampus - -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Pisahkan dengan koma (,) untuk fasilitas lebih dari satu -
-
-
- - -
-
- Foto Kontrakan -
- -
-
-
-
- -
- foto): ?> - <?php echo e($kontrakan->nama); ?> - -
- -

Belum ada foto

-
- - - -
- - -
- - - Format: JPG, PNG, JPEG (Max 2MB) - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- - - foto): ?> -
- - -
- -
-
-
-
-
-
- - -
-
- Info Perubahan -
-

- Anda sedang mengedit data kontrakan nama); ?>. - Pastikan semua perubahan sudah benar sebelum menyimpan. -

-
- - -
- - Batal - - -
-
-
-
- - -
-
-
- -
-
-
Riwayat Data:
-

- Dibuat: created_at->format('d M Y, H:i')); ?> WIB -

- updated_at != $kontrakan->created_at): ?> -

- Terakhir diupdate: updated_at->format('d M Y, H:i')); ?> WIB -

- -
-
-
-
-
-
- - - - - - - - - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/62b47ba91414543ff7e2fb59fd5405ad.php b/spk_kontrakan/storage/framework/views/62b47ba91414543ff7e2fb59fd5405ad.php index 05055c5..dd6fbb1 100644 --- a/spk_kontrakan/storage/framework/views/62b47ba91414543ff7e2fb59fd5405ad.php +++ b/spk_kontrakan/storage/framework/views/62b47ba91414543ff7e2fb59fd5405ad.php @@ -762,7 +762,7 @@ addLoop($__currentLoopData); foreach($__currentLoopData as $l): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
-
+
nama); ?>

alamat ?? '-', 25)); ?> diff --git a/spk_kontrakan/storage/framework/views/6b304950f45ce77007f7b02d78cabc42.php b/spk_kontrakan/storage/framework/views/6b304950f45ce77007f7b02d78cabc42.php deleted file mode 100644 index 1ab3ff8..0000000 --- a/spk_kontrakan/storage/framework/views/6b304950f45ce77007f7b02d78cabc42.php +++ /dev/null @@ -1,176 +0,0 @@ - - -startSection('title', 'Backup & Restore Database'); ?> - -startSection('content'); ?> -

- - - -
-
-
-

- Backup & Restore Database -

-

Kelola backup database untuk keamanan data

-
-
- - -
-
-
- - - - - - - - - - - -
- - Tips: Lakukan backup secara berkala untuk mengamankan data. Backup dibuat dalam format ZIP dan dapat di-download. -
- - -
-
-
- Daftar Backup () -
-
- -
- -
- -
Tidak ada backup ditemukan
-

Klik tombol "Buat Backup Baru" untuk membuat backup pertama Anda

-
- -
- addLoop($__currentLoopData); foreach($__currentLoopData as $backup): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
-
-
-
-
-
- -
-
-
- - - - - - - MB - -
-
-
- -
-
- - Download - - -
- - -
- -
- - - -
-
-
-
-
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- -
-
- - -
-
-
-
-
- Backup Information -
- - Total Backups: - - - - Total Size: MB - - 0): ?> - - Latest: - - - -
-
-
- -
-
-
-
- Reminder -
- - ⚠️ Backup database secara rutin (minimal 1x sehari) untuk mencegah kehilangan data yang tidak dapat dipulihkan. - -
-
-
-
-
-stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/750ed3e845a2f0e93cc431f7924de6f1.php b/spk_kontrakan/storage/framework/views/750ed3e845a2f0e93cc431f7924de6f1.php deleted file mode 100644 index 7a13def..0000000 --- a/spk_kontrakan/storage/framework/views/750ed3e845a2f0e93cc431f7924de6f1.php +++ /dev/null @@ -1,1383 +0,0 @@ - - -startSection('title', 'Kelola Kriteria SAW'); ?> - -startSection('content'); ?> -
- - - - -
-
-
- - -
-
-
-

- - 📊 Kelola Kriteria SAW - 📊 Kriteria -

-

- Atur dan kelola kriteria penilaian untuk metode Simple Additive Weighting - Kelola kriteria SAW -

-
- -
-
- - - - - - - - - - - - - - - - - -
- -
-
- - - - -
- -
- -
- - - - -
-
- - -
- - -
- - -
-
- - 🏠 Kontrakan: where('tipe_bisnis', 'kontrakan')->count() : 0); ?> - - - 👕 Laundry: where('tipe_bisnis', 'laundry')->count() : 0); ?> - -
-
-
-
-
- - -
- isEmpty()): ?> - -
-
-
- -
-
-
Belum ada kriteria
-

Mulai tambahkan kriteria untuk penilaian SAW (Simple Additive Weighting) agar dapat melakukan perhitungan rekomendasi yang akurat.

- - Tambah Kriteria Pertama - -
- - -
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
- -
-
-
- tipe_bisnis == 'kontrakan'): ?> - - 🏠 Kontrakan - - - - 👕 Laundry - - -
-
- - -
nama_kriteria); ?>
- - -
-
-
- BOBOT -
- bobot); ?> - (bobot * 100, 1)); ?>%) -
-
-
-
-
- TIPE - tipe) == 'benefit'): ?> - - 📈 tipe)); ?> - - - - - 📉 tipe)); ?> - - - -
-
-
- - - keterangan): ?> -
- KETERANGAN -

keterangan); ?>

-
- - - -
- - Edit - - -
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
-
- - -
-
- - - - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - - - - - - - - - -
- No - - - Tipe Bisnis - - - - - Nama Kriteria - - - - - Bobot - - - - - Tipe - - - - Keterangan - - Aksi -
-
-
- tipe_bisnis == 'kontrakan'): ?> - - 🏠 Kontrakan - - - - 👕 Laundry - - - -
-
- -
-
-
nama_kriteria); ?>
- Kriteria -
-
-
-
- bobot); ?> - (bobot * 100, 1)); ?>%) -
-
- tipe) == 'benefit'): ?> - - 📈 Benefit - - - - 📉 Cost - - - -
- - keterangan ? Str::limit($item->keterangan, 60) : '-'); ?> - - -
-
-
- - - - - user()->role == 'super_admin'): ?> - - - - -
-
-
-
📊 Validasi Total Bobot
-
- - - 🏠 - Kontrakan: - - - - - - 👕 - Laundry: - - -
-
-
-
-
- - - Catatan: Total bobot untuk setiap tipe bisnis harus = 1.00 (100%)
- agar perhitungan SAW (Simple Additive Weighting) memberikan hasil yang akurat. -
-
-
-
-
-
- Total Bobot Kontrakan: - - - - - - - - - - - - - - - - Total Bobot Laundry: - - - - - - - - - - - - -
- - - - Total: sum('bobot'), 2)); ?> - - - - - - - -
-
- - - count() > 0): ?> -
-
-
-
-
-
- -
-
📋 Informasi Kriteria SAW
-
-
-
    -
  • 📈 Benefit: Semakin tinggi nilai, semakin baik
    (contoh: Fasilitas, Kualitas Layanan)
  • -
  • 📉 Cost: Semakin rendah nilai, semakin baik
    (contoh: Harga, Jarak, Biaya)
  • -
  • ⚖️ Total Bobot: Harus = 1.00 (100%) untuk setiap tipe bisnis
    agar perhitungan SAW akurat dan valid
  • -
-
-
-
-
-
-
-
-
-
- -
-
📊 Statistik Kriteria
-
-
-
-
-
count()); ?>
- Total Kriteria -
-
-
-
-
- Benefit -
-
-
-
-
- Cost -
-
-
-
-
-
-
- -
- - - - - - - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/81aca8525ebe1474a20ec791c32c9770.php b/spk_kontrakan/storage/framework/views/81aca8525ebe1474a20ec791c32c9770.php index 09cd931..2006fca 100644 --- a/spk_kontrakan/storage/framework/views/81aca8525ebe1474a20ec791c32c9770.php +++ b/spk_kontrakan/storage/framework/views/81aca8525ebe1474a20ec791c32c9770.php @@ -54,6 +54,21 @@ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + + /* Shared color variables for views */ + --primary-color: #667eea; + --primary-color-rgb: 102, 126, 234; + --secondary-color: #764ba2; + --secondary-color-rgb: 118, 75, 162; + --info-color: #17a2b8; + --info-color-rgb: 23, 162, 184; + --success-color: #28a745; + --success-color-rgb: 40, 167, 69; + --warning-color: #ffc107; + --warning-color-rgb: 255, 193, 7; + --danger-color: #dc3545; + --danger-color-rgb: 220, 53, 69; + --text-muted: #6c757d; } * { diff --git a/spk_kontrakan/storage/framework/views/84dd4efe61f3c815daff24c589049140.php b/spk_kontrakan/storage/framework/views/84dd4efe61f3c815daff24c589049140.php deleted file mode 100644 index 1ab64ab..0000000 --- a/spk_kontrakan/storage/framework/views/84dd4efe61f3c815daff24c589049140.php +++ /dev/null @@ -1,2309 +0,0 @@ - - -startSection('title', 'Daftar Kontrakan'); ?> - -startSection('content'); ?> -
- - - -
-
-
- - -
-
-
-

- Kelola KontrakanKontrakan -

-

Informasi lengkap dan manajemen data kontrakan yang tersediaManajemen data kontrakan

-
- -
-
- - -
-
-
- -
-
total() ?? 0); ?>
-
Total Kontrakan
-
-
-
- -
-
-
Harga Terendah
-
-
-
- -
-
-
Jarak Terjauh
-
-
-
- -
-
-
Kamar Terbanyak
-
-
- - - - - - - - - - - - -
-
-
-
-
- - Pencarian & Filter Kontrakan -
-
-
-
- - -
-
-
-
-
-
-
- -
- -
-
- - - - - - - - -
- -
- -
- -
-
- - - 💡 Ketik "WiFi", "Dapur", "AC" atau kata kunci lainnya untuk hasil lebih spesifik - 💡 Coba "WiFi", "Dapur", "AC" - -
- - -
-
-
- - Filter Lanjutan -
- -
- -
- -
- -
-
-
-
- Min - -
-
-
-
- Max - -
-
-
-
-
- - Geser untuk minimum -
-
- - Geser untuk maksimum -
-
-
-
- - Range tersedia: Rp - Rp - Rp - -
-
- - -
- -
-
- km -
- - Geser untuk menyesuaikan -
-
- - Jarak terjauh tersedia: km - Max: km -
-
- - -
- -
-
-
-
- Min - kmr -
-
-
-
- Max - kmr -
-
-
-
-
- - Minimum kamar -
-
- - Maksimum kamar -
-
-
-
- - Range: - kamar -
-
- - - count() > 0): ?> -
- -
-
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $fasilitas): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
- - - style="accent-color: var(--primary-color);" - > - -
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
-
-
- - - Pilih satu atau lebih fasilitas (hasil akan menampilkan kontrakan yang memiliki SEMUA fasilitas terpilih) - Pilih fasilitas yang diinginkan - -
- - - -
- -
-
- > - -
-
- > - -
-
- > - -
-
- > - -
-
-
-
- - -
- - - - Reset Filter - Reset - -
- -
-
-
- - -
-
-
-
- - - - - - dari - - kontrakan - - - - - - - "" - 🔍 - - - - - - - - Rp - Rp - - - 💰 - - - - - - - Max km - 📍km - - - - - - - - kamar - 🏠- - - - - - - - fasilitas - - - -
- - - 0): ?> - query(); - $queryString = !empty($queryParams) ? '?' . http_build_query($queryParams) : ''; - } catch (\Exception $e) { - $queryString = ''; - } - ?> - - -
-
-
- -
- -
-
-
- - - count()); ?> kontrakan - - - - user()->role == 'super_admin' && $kontrakan->count() > 0): ?> - - -
- - - - total()); ?> Data - -
-
- -
- isEmpty()): ?> - -
-
- -
-
- Tidak ada data kontrakan ditemukan - Data tidak ditemukan -
-

- hasAny(['search', 'harga_min', 'harga_max', 'jarak_max', 'luas_min', 'luas_max', 'fasilitas_filter'])): ?> - Tidak ada kontrakan yang sesuai dengan kriteria filter Anda.
Coba ubah atau reset filter untuk melihat hasil lain.
- Filter tidak menemukan hasil. Coba ubah atau reset filter. - - Belum ada data kontrakan. Mulai tambahkan data kontrakan pertama Anda! - Belum ada data. Tambahkan kontrakan pertama! - -

-
- hasAny(['search', 'harga_min', 'harga_max', 'jarak_max', 'luas_min', 'luas_max', 'fasilitas_filter'])): ?> - - - Reset Filter - Reset - - - - - Tambah Kontrakan - Tambah - -
-
- - -
- addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
-
-
- user()->role == 'super_admin'): ?> - - -
-
- - nama); ?> - - status_label); ?> -
-

- alamat, 45)); ?> - -

-
-
- - #firstItem() + $index); ?> - - -
- - -
-
- 💰 Harga/Tahun - - Rp harga, 0, ',', '.')); ?> - - -
-
- 📏 Jarak - - jarak / 1000, 1)); ?> km - -
-
- 🚪 Kamar - - jumlah_kamar); ?> Kamar - -
-
- - - fasilitas): ?> -
- ✨ Fasilitas: -
- fasilitas)), 0, 3); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $f): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - popLoop(); $loop = $__env->getLastLoop(); ?> - fasilitas)) > 3): ?> - +fasilitas)) - 3); ?> - -
-
- - - - hasWhatsapp()): ?> - - Hubungi Pemilik via WhatsApp - - - - -
- latitude && $item->longitude): ?> - - - - - - - - - - - - user()->role == 'super_admin'): ?> - -
- - -
- -
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- - -
- - - - user()->role == 'super_admin'): ?> - - - - - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - user()->role == 'super_admin'): ?> - - - - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - -
-
- -
-
- No - - Nama Kontrakan - - Alamat - - Harga/Tahun - - Jarak - - Fasilitas - - Kamar - - Aksi -
- - - firstItem() + $index); ?> - -
-
- -
-
-
- nama); ?> - - status_label); ?> -
- hasWhatsapp()): ?> - - Ada kontak WhatsApp - - -
-
-
- - alamat, 50)); ?> - - - - - - Rp harga, 0, ',', '.')); ?> - - - - - jarak / 1000, 1)); ?> km - - - fasilitas): ?> -
- fasilitas)), 0, 2); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $f): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - popLoop(); $loop = $__env->getLastLoop(); ?> - fasilitas)) > 2): ?> - +fasilitas)) - 2); ?> - -
- - - - -
- - jumlah_kamar); ?> Kamar - - -
- latitude && $item->longitude): ?> - - - - - - - - - - - - user()->role == 'super_admin'): ?> - - -
- - -
- - - -
-
-
- -
- - - hasPages()): ?> - - -
-
- - -
-
-
-
- - - - - -
- - -
- - - - - -stopSection(); ?> - -startSection('scripts'); ?> - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/997e6940f3b97384fb2e68c445e4a212.php b/spk_kontrakan/storage/framework/views/997e6940f3b97384fb2e68c445e4a212.php deleted file mode 100644 index 22c7ef2..0000000 --- a/spk_kontrakan/storage/framework/views/997e6940f3b97384fb2e68c445e4a212.php +++ /dev/null @@ -1,214 +0,0 @@ - - -startSection('title', 'Kelola User'); ?> - -startSection('content'); ?> -
- - - -
-
-
-

- Kelola User Administrator -

-

Manage user accounts dan permissions

-
- -
-
- - - - - - - -
-
-
-
- - -
- -
- - -
- -
- - -
- -
- - - Reset - -
-
-
-
- - -
-
-
-
- Daftar User (total()); ?>) -
-
-
- -
- isEmpty()): ?> -
- -
Tidak ada user ditemukan
-
- -
- - - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $user): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - -
NamaEmailRoleStatusDibuatAksi
-
-
- name, 0, 1))); ?> - -
- name); ?> -
-
- email); ?> - - role === 'super_admin'): ?> - Super Admin - - Admin - - - deleted_at): ?> - Tidak Aktif - - Aktif - - - created_at->format('d M Y')); ?> - -
- deleted_at): ?> -
- - -
- - - - - - - id !== auth()->id()): ?> -
- - - -
- -
-
-
- -
-
- - -
- links()); ?> - -
-
-stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/b013a8c110c7b48f95c189a44c72a9f6.php b/spk_kontrakan/storage/framework/views/b013a8c110c7b48f95c189a44c72a9f6.php deleted file mode 100644 index a26911e..0000000 --- a/spk_kontrakan/storage/framework/views/b013a8c110c7b48f95c189a44c72a9f6.php +++ /dev/null @@ -1,1763 +0,0 @@ - - -startSection('title', 'Daftar Laundry'); ?> - -startSection('content'); ?> -
- - - - -
-
-
- - -
-
-
-

- - 🧺 Daftar Laundry - 🧺 Laundry -

-

- Kelola dan pantau data layanan laundry yang tersedia -

-
- -
-
- - - - - - - - - - - - -
-
-
-
-
- - Pencarian & Filter Laundry -
-
-
- -
-
-
- -
-
-
- -
- -
- - - - - -
- - - 💡 Coba "WiFi", "Antar Jemput", "24 Jam" untuk hasil lebih spesifik - 💡 Coba "WiFi", "Antar Jemput" - -
- - -
-
-
- - Filter Lanjutan -
- -
- -
- -
- -
-
-
-
- Min - -
-
-
-
- Max - -
-
-
-
-
- - Geser untuk minimum -
-
- - Geser untuk maksimum -
-
-
-
- - Range: Rp - Rp - Rp - -
-
- - -
- -
-
- km -
- - Geser untuk menyesuaikan -
-
- - Jarak terjauh: km - Max: km -
-
- - -
- -
-
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $jenis): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
- - - style="accent-color: #667eea;" - > - -
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
-
-
-
- - - count() > 0): ?> -
- -
-
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $fasilitas): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> -
-
- - - style="accent-color: #ffc107;" - > - -
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
-
-
- - - Pilih fasilitas (hasil akan menampilkan laundry yang memiliki SEMUA fasilitas terpilih) - Pilih fasilitas yang diinginkan - -
- - - -
- -
-
- > - -
-
- > - -
-
- > - -
-
- > - -
-
-
-
- - -
- - - - Reset Filter - Reset - -
-
-
-
-
-
- - -
-
-
-
- - - - - - dari - - laundry - - - - - - - "" - 🔍 - - - - - - - - Rp - Rp - - - 💰 - - - - - - - Max km - 📍km - - - - - - - layanan - - - - - - - - fasilitas - - - -
- - - 0): ?> - -
-
-
- - - -
- -
-
-
- - - count()); ?> laundry - - - user()->role == 'super_admin' && $laundry->count() > 0): ?> - - -
- - - count()); ?> Data - -
-
- -
- isEmpty()): ?> - -
-
- -
-
- Tidak ada data laundry ditemukan - Data tidak ditemukan -
-

- hasAny(['search', 'harga_min', 'harga_max', 'jarak', 'jenis_layanan'])): ?> - Tidak ada laundry yang sesuai dengan kriteria filter. Coba ubah atau reset filter. - Filter tidak menemukan hasil. Coba ubah filter. - - Belum ada data laundry. Mulai tambahkan layanan laundry pertama Anda! - Belum ada data. Tambahkan laundry pertama! - -

-
- hasAny(['search', 'harga_min', 'harga_max', 'jarak', 'jenis_layanan'])): ?> - - - Reset Filter - Reset - - - - - Tambah Laundry - Tambah - - -
-
- - -
- addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - layanan; - if (!empty($filters['jenis_layanan'])) { - $filteredLayanan = $item->layanan->where('jenis_layanan', $filters['jenis_layanan']); - } - ?> -
-
-
-
- user()->role == 'super_admin'): ?> - - -
-
- - nama); ?> - -
-

- alamat, 45)); ?> - -

-
-
- - # - - -
- - - isNotEmpty()): ?> -
-
- addLoop($__currentLoopData); foreach($__currentLoopData as $layanan): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - -
-
- Harga -
- Rp harga, 0, ',', '.')); ?> - -
-
-
- - -
-
- Jenis Layanan -
- jenis_layanan)); ?> - -
-
-
- - -
-
- Estimasi Selesai -
- estimasi_selesai); ?> Jam -
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
-
- - - -
-
-
-
- Jarak dari Kampus -
- jarak / 1000, 1)); ?> km -
-
-
-
-
- - -
- latitude && $item->longitude): ?> - - - - - - - - - - - - user()->role == 'super_admin'): ?> - -
- - -
- -
-
-
- popLoop(); $loop = $__env->getLastLoop(); ?> -
- - -
- - - - user()->role == 'super_admin'): ?> - - - - - - - - - - - - - - - addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - layanan; - if (!empty($filters['jenis_layanan'])) { - $filteredLayanan = $item->layanan->where('jenis_layanan', $filters['jenis_layanan']); - } - ?> - - user()->role == 'super_admin'): ?> - - - - - - - - - - - - - - - - - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - -
-
- -
-
- No - - Nama Laundry - - Alamat - - Harga - - Jarak - - Jenis Layanan - - Estimasi - - Aksi -
- - - firstItem() + $index); ?> - -
-
- -
-
-
nama); ?>
-
-
-
- - alamat, 50)); ?> - - - - isNotEmpty()): ?> -
- addLoop($__currentLoopData); foreach($__currentLoopData as $layanan): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - Rp harga, 0, ',', '.')); ?> - - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- - - - -
- - jarak / 1000, 1)); ?> km - - - isNotEmpty()): ?> -
- addLoop($__currentLoopData); foreach($__currentLoopData as $layanan): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - jenis_layanan)); ?> - - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- - - - -
- isNotEmpty()): ?> -
- addLoop($__currentLoopData); foreach($__currentLoopData as $layanan): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - estimasi_selesai); ?> jam - - popLoop(); $loop = $__env->getLastLoop(); ?> -
- - - - -
-
- latitude && $item->longitude): ?> - - - - - - - - - - - - user()->role == 'super_admin'): ?> - -
- - -
- -
-
-
- -
- - - hasPages()): ?> - - -
-
- - - - - - -
- - -
- - - - - - - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/ee70804036bd06aaaf7aa7c82c92bb1c.php b/spk_kontrakan/storage/framework/views/ee70804036bd06aaaf7aa7c82c92bb1c.php deleted file mode 100644 index 89ae979..0000000 --- a/spk_kontrakan/storage/framework/views/ee70804036bd06aaaf7aa7c82c92bb1c.php +++ /dev/null @@ -1,821 +0,0 @@ - - -startSection('title', 'Metode SAW'); ?> - -startSection('content'); ?> -
- - - - - - -
-

🧮 Metode SAW

-

Sistem Pendukung Keputusan untuk rekomendasi terbaik

-
- - - - - - - -
-
-
- -
-
-
Tentang Metode SAW
-

- Metode SAW digunakan untuk menentukan ranking alternatif terbaik berdasarkan kriteria yang telah ditentukan. - Sistem akan menghitung nilai normalisasi dan bobot untuk setiap kriteria, kemudian menghasilkan peringkat rekomendasi. -

-
-
-
- - -
-
- -
-
-
- Pilih Jenis Pencarian -
- -
- - - - - - -
- -
- - -
- - -
- - -
-
- - -
-
- -
- Jarak Kontrakan -

- Jarak dihitung otomatis dari Kampus Polije. - Sistem akan merekomendasikan kontrakan terdekat dari kampus. -

-
-
-
- - - - - - - - -
-
-
- Kriteria yang Digunakan -
-
- - - - - - - - - - count() > 0): ?> - addLoop($__currentLoopData); foreach($__currentLoopData as $k): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?> - - - - - - popLoop(); $loop = $__env->getLastLoop(); ?> - - - - - - - - - - - - - -
KriteriaBobotTipe
nama_kriteria ?? 'N/A'); ?> - bobot ?? 0); ?> - - tipe) && strtolower($k->tipe) == 'benefit'): ?> - - Benefit - - - - Cost - - -
Tidak ada kriteria yang tersedia
Total Bobot - - where('tipe_bisnis', 'kontrakan')->sum('bobot') : 0); ?> - - -
-
-
-
- - -
- -
- - - -
-
-
- - -
-
-
-
-
- Kelebihan SAW -
-
    -
  • Mudah dipahami
  • -
  • Perhitungan sederhana
  • -
  • Hasil objektif
  • -
  • Jarak dihitung otomatis dari GPS
  • -
-
-
-
-
-
-
-
- Cara Kerja -
-
    -
  1. Kontrakan: Jarak dari Kampus Polije
  2. -
  3. Laundry: Jarak dari Kampus atau Lokasi Anda
  4. -
  5. Normalisasi nilai kriteria
  6. -
  7. Kalikan dengan bobot
  8. -
  9. Urutkan berdasarkan nilai tertinggi
  10. -
-
-
-
-
-
-
-
- - -
- - -stopSection(); ?> - -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/f9330509a01e8be5e3e2318d14daa2d7.php b/spk_kontrakan/storage/framework/views/f9330509a01e8be5e3e2318d14daa2d7.php index d6a471c..3b2c4d8 100644 --- a/spk_kontrakan/storage/framework/views/f9330509a01e8be5e3e2318d14daa2d7.php +++ b/spk_kontrakan/storage/framework/views/f9330509a01e8be5e3e2318d14daa2d7.php @@ -174,7 +174,6 @@ diff --git a/spk_kontrakan/storage/framework/views/f9a1a87513eabf56a496d6aacefe5611.php b/spk_kontrakan/storage/framework/views/f9a1a87513eabf56a496d6aacefe5611.php deleted file mode 100644 index c32b73c..0000000 --- a/spk_kontrakan/storage/framework/views/f9a1a87513eabf56a496d6aacefe5611.php +++ /dev/null @@ -1,109 +0,0 @@ -hasPages()): ?> - - - \ No newline at end of file diff --git a/spk_kontrakan/storage/framework/views/fb61136dff9b1102c61099d21d6a923f.php b/spk_kontrakan/storage/framework/views/fb61136dff9b1102c61099d21d6a923f.php deleted file mode 100644 index 58fb098..0000000 --- a/spk_kontrakan/storage/framework/views/fb61136dff9b1102c61099d21d6a923f.php +++ /dev/null @@ -1,957 +0,0 @@ - - -startSection('title', 'Tambah Laundry'); ?> - -startSection('content'); ?> -
- - - - - - - - - -
-
-
-
-
- - - -
-
- Informasi Dasar -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Masukkan nama laundry yang mudah dikenali -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Alamat lengkap beserta patokan jika ada -
- - -
-
- -
- Perhitungan Jarak Otomatis -

- Jarak akan dihitung otomatis dari Kampus Polije berdasarkan koordinat GPS yang Anda tentukan. -

-
-
-
- - -
- -
- - - - - meter - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - - Jarak otomatis dihitung dari koordinat laundry ke kampus - -
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- Fasilitas yang disediakan laundry ini -
-
-
- - -
-
- Lokasi & Koordinat -
- -
- - Tips: Klik pada peta untuk menentukan lokasi, atau gunakan tombol "Deteksi Lokasi Saya" untuk mendapatkan koordinat otomatis. -
- -
- -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
-
- - -
- -
- - - - - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
-
- - -
- - Atau klik langsung pada peta di bawah -
- - -
-
-
-
-
- - -
-
-
- Jenis Layanan -
- -
- -
- -
-
-
-
Layanan #1
- -
- -
- -
- - -
- - -
- - -
- - -
- -
- Rp - -
-
- - -
- - -
- - -
- - -
- - -
- - -
-
-
-
-
- - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - -
-
- Upload Foto -
- -
-
- - - Format: JPG, PNG, JPEG (Maksimal 2MB). Kosongkan jika tidak ingin upload foto. - getBag($__errorArgs[1] ?? 'default'); -if ($__bag->has($__errorArgs[0])) : -if (isset($message)) { $__messageOriginal = $message; } -$message = $__bag->first($__errorArgs[0]); ?> -
- -
- - -
- -
-
-
- - -
- - Batal - - -
-
-
-
- - -
-
-
-
- -
-
-
Tips Pengisian:
-
    -
  • Minimal harus ada 1 jenis layanan
  • -
  • Klik pada peta untuk menentukan lokasi laundry
  • -
  • Koordinat akan terisi otomatis saat klik peta
  • -
  • Reguler: Layanan normal dengan harga standar
  • -
  • Express: Layanan cepat dengan harga lebih tinggi
  • -
  • Kilat: Layanan super cepat dengan harga premium
  • -
-
-
-
-
-
-
-
- - - - - - - - - - - -stopSection(); ?> -make('layouts.admin', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?> \ No newline at end of file diff --git a/spk_mobile/lib/config/app_config.dart b/spk_mobile/lib/config/app_config.dart index f8c5398..3169946 100644 --- a/spk_mobile/lib/config/app_config.dart +++ b/spk_mobile/lib/config/app_config.dart @@ -1,14 +1,27 @@ class AppConfig { - // Base URL - Ganti sesuai environment - // Windows Desktop: http://localhost:8000 - // Android Emulator: http://10.0.2.2:8000 - // iOS Simulator: http://localhost:8000 - // Real Device: http://192.168.18.16:8000 (IP komputer Anda) + // ============================================================================ + // 🔧 BASE URL CONFIGURATION - AUTO-DETECTED AT RUNTIME + // ============================================================================ + // URL ini otomatis dideteksi saat app startup via ServerDiscoveryService. + // Fallback default: IP terakhir yang berhasil terhubung. + // + // ✅ Tidak perlu update manual lagi! + // ============================================================================ - // CATATAN: Untuk real device, ganti IP sesuai dengan IP komputer Anda - // Cek IP dengan: ipconfig (di Windows) atau ifconfig (di Linux/Mac) - static const String baseUrl = 'http://192.168.18.16:8000/api'; - static const String storageUrl = 'http://192.168.18.16:8000/storage'; + // Default fallback (dipakai jika auto-detect gagal) + static const String _defaultServer = 'http://192.168.1.154:8000'; + + // Runtime values — diupdate otomatis oleh ServerDiscoveryService + static String _serverUrl = _defaultServer; + + static String get serverUrl => _serverUrl; + static String get baseUrl => '$_serverUrl/api'; + static String get storageUrl => '$_serverUrl/storage'; + + /// Dipanggil oleh ServerDiscoveryService setelah server ditemukan + static void setServerUrl(String url) { + _serverUrl = url; + } // Timeouts static const Duration connectionTimeout = Duration(seconds: 10); diff --git a/spk_mobile/lib/config/environment.dart b/spk_mobile/lib/config/environment.dart new file mode 100644 index 0000000..b11fb9e --- /dev/null +++ b/spk_mobile/lib/config/environment.dart @@ -0,0 +1,24 @@ +// Environment configuration yang dapat berubah runtime +class Environment { + // 💻 For Development + // Android Emulator = http://10.0.2.2:8000 + // iOS Simulator = http://localhost:8000 + // Real Device = Ganti dengan IP komputer Anda + + // Pilih sesuai platform dan environment saat development + static const String apiBaseUrl = String.fromEnvironment( + 'API_BASE_URL', + defaultValue: 'http://192.168.1.154:8000', // Default IP lokal + ); + + static const String storageBaseUrl = String.fromEnvironment( + 'STORAGE_BASE_URL', + defaultValue: 'http://192.168.1.154:8000/storage', + ); + + // Mode debugging + static const bool isDebugMode = true; +} + +// Catatan: Untuk production: +// flutter run --dart-define=API_BASE_URL=https://api.production.com diff --git a/spk_mobile/lib/login.dart b/spk_mobile/lib/login.dart index f434062..2179814 100644 --- a/spk_mobile/lib/login.dart +++ b/spk_mobile/lib/login.dart @@ -210,24 +210,34 @@ class _LoginScreenState extends State { setState(() => _isLoading = true); - final result = await _authService.login( - email: _emailController.text.trim(), - password: _passwordController.text, - ); - - setState(() => _isLoading = false); - - if (!mounted) return; - - if (result['success']) { - Navigator.pushReplacement( - context, - MaterialPageRoute(builder: (context) => const ImprovedHomeScreen()), + try { + final result = await _authService.login( + email: _emailController.text.trim(), + password: _passwordController.text, ); - } else { + + if (!mounted) return; + setState(() => _isLoading = false); + + if (result['success']) { + Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => const ImprovedHomeScreen()), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Login gagal'), + backgroundColor: Colors.red, + ), + ); + } + } catch (e) { + if (!mounted) return; + setState(() => _isLoading = false); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(result['message'] ?? 'Login gagal'), + content: Text('Terjadi kesalahan: $e'), backgroundColor: Colors.red, ), ); diff --git a/spk_mobile/lib/main.dart b/spk_mobile/lib/main.dart index 5a8c357..d6196b8 100644 --- a/spk_mobile/lib/main.dart +++ b/spk_mobile/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter/services.dart'; import 'login.dart'; import 'screens/improved_home_screen.dart'; import 'services/auth_service.dart'; +import 'services/server_discovery_service.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); @@ -110,6 +111,7 @@ class _SplashScreenState extends State late AnimationController _animController; late Animation _fadeAnim; late Animation _scaleAnim; + String _statusText = 'Memulai aplikasi...'; @override void initState() { @@ -135,8 +137,16 @@ class _SplashScreenState extends State } Future _checkAuth() async { + // 🔍 Auto-detect server IP + await ServerDiscoveryService.discover( + onStatus: (status) { + if (mounted) setState(() => _statusText = status); + }, + ); + + if (mounted) setState(() => _statusText = 'Memeriksa sesi...'); await _authService.loadToken(); - await Future.delayed(const Duration(milliseconds: 1600)); + await Future.delayed(const Duration(milliseconds: 400)); if (!mounted) return; @@ -228,6 +238,14 @@ class _SplashScreenState extends State ), ), ), + const SizedBox(height: 16), + Text( + _statusText, + style: TextStyle( + fontSize: 13, + color: Colors.white.withOpacity(0.7), + ), + ), ], ), ), diff --git a/spk_mobile/lib/models/kontrakan.dart b/spk_mobile/lib/models/kontrakan.dart index 7f4219a..87b047c 100644 --- a/spk_mobile/lib/models/kontrakan.dart +++ b/spk_mobile/lib/models/kontrakan.dart @@ -1,3 +1,5 @@ +import '../config/app_config.dart'; + class Kontrakan { final int id; final String nama; @@ -108,8 +110,7 @@ class Kontrakan { if (foto!.startsWith('http')) { return foto!; } - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Kontrakan/$foto'; + return '${AppConfig.serverUrl}/uploads/Kontrakan/$foto'; } // 2. Fall back to galeri items if foto is not set if (galeri.isNotEmpty) { @@ -121,8 +122,7 @@ class Kontrakan { return primary.foto; } if (primary.foto.isNotEmpty) { - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Kontrakan/${primary.foto}'; + return '${AppConfig.serverUrl}/uploads/Kontrakan/${primary.foto}'; } } return 'https://via.placeholder.com/300'; @@ -168,7 +168,6 @@ class Galeri { return foto; } // Build full URL from uploads - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Kontrakan/$foto'; + return '${AppConfig.serverUrl}/uploads/Kontrakan/$foto'; } } diff --git a/spk_mobile/lib/models/laundry.dart b/spk_mobile/lib/models/laundry.dart index 8fcaae0..3e9ce8e 100644 --- a/spk_mobile/lib/models/laundry.dart +++ b/spk_mobile/lib/models/laundry.dart @@ -1,3 +1,5 @@ +import '../config/app_config.dart'; + class Laundry { final int id; final String nama; @@ -127,8 +129,7 @@ class Laundry { if (foto!.startsWith('http')) { return foto!; } - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Laundry/$foto'; + return '${AppConfig.serverUrl}/uploads/Laundry/$foto'; } // 2. Fall back to galeri items if foto is not set if (galeri.isNotEmpty) { @@ -140,8 +141,7 @@ class Laundry { return primary.foto; } if (primary.foto.isNotEmpty) { - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Laundry/${primary.foto}'; + return '${AppConfig.serverUrl}/uploads/Laundry/${primary.foto}'; } } return 'https://via.placeholder.com/300'; @@ -209,7 +209,6 @@ class GaleriLaundry { return foto; } // Build full URL from uploads - const String baseUrl = 'http://192.168.18.16:8000'; - return '$baseUrl/uploads/Laundry/$foto'; + return '${AppConfig.serverUrl}/uploads/Laundry/$foto'; } } diff --git a/spk_mobile/lib/register.dart b/spk_mobile/lib/register.dart index 79cf475..bcdb3fe 100644 --- a/spk_mobile/lib/register.dart +++ b/spk_mobile/lib/register.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'login.dart'; -import 'screens/mobile_home_screen.dart'; +import 'screens/improved_home_screen.dart'; import 'services/auth_service.dart'; class RegisterScreen extends StatefulWidget { @@ -11,6 +12,7 @@ class RegisterScreen extends StatefulWidget { } class _RegisterScreenState extends State { + final _formKey = GlobalKey(); final _nameController = TextEditingController(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); @@ -35,6 +37,7 @@ class _RegisterScreenState extends State { backgroundColor: Colors.white, body: Column( children: [ + // Header Container( width: double.infinity, padding: const EdgeInsets.fromLTRB(8, 0, 16, 24), @@ -53,15 +56,13 @@ class _RegisterScreenState extends State { bottom: false, child: Column( children: [ - Row( - children: [ - IconButton( - icon: const Icon(Icons.arrow_back_rounded, color: Colors.white), - onPressed: () => Navigator.pop(context), - ), - ], + Align( + alignment: Alignment.centerLeft, + child: IconButton( + icon: const Icon(Icons.arrow_back_rounded, color: Colors.white), + onPressed: () => Navigator.pop(context), + ), ), - const SizedBox(height: 8), Container( padding: const EdgeInsets.all(18), decoration: BoxDecoration( @@ -103,25 +104,38 @@ class _RegisterScreenState extends State { ), ), ), + + // Form Expanded( child: SingleChildScrollView( padding: const EdgeInsets.fromLTRB(24, 28, 24, 24), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ _buildTextField( label: 'Nama', controller: _nameController, prefixIcon: Icons.person_outline, + validator: (v) { + if (v == null || v.trim().isEmpty) return 'Nama tidak boleh kosong'; + return null; + }, ), - const SizedBox(height: 16), + const SizedBox(height: 18), _buildTextField( label: 'Email', controller: _emailController, keyboardType: TextInputType.emailAddress, prefixIcon: Icons.email_outlined, + validator: (v) { + if (v == null || v.trim().isEmpty) return 'Email tidak boleh kosong'; + if (!v.contains('@')) return 'Email tidak valid'; + return null; + }, ), - const SizedBox(height: 16), + const SizedBox(height: 18), _buildTextField( label: 'Password', controller: _passwordController, @@ -134,14 +148,15 @@ class _RegisterScreenState extends State { : Icons.visibility_off_outlined, color: const Color(0xFF1565C0), ), - onPressed: () { - setState(() { - _obscurePassword = !_obscurePassword; - }); - }, + onPressed: () => setState(() => _obscurePassword = !_obscurePassword), ), + validator: (v) { + if (v == null || v.isEmpty) return 'Password tidak boleh kosong'; + if (v.length < 6) return 'Password minimal 6 karakter'; + return null; + }, ), - const SizedBox(height: 16), + const SizedBox(height: 18), _buildTextField( label: 'Konfirmasi Password', controller: _confirmPasswordController, @@ -154,48 +169,32 @@ class _RegisterScreenState extends State { : Icons.visibility_off_outlined, color: const Color(0xFF1565C0), ), - onPressed: () { - setState(() { - _obscureConfirmPassword = !_obscureConfirmPassword; - }); - }, + onPressed: () => setState(() => _obscureConfirmPassword = !_obscureConfirmPassword), ), + validator: (v) { + if (v != _passwordController.text) return 'Password tidak cocok'; + return null; + }, ), const SizedBox(height: 28), + + // Tombol Daftar SizedBox( width: double.infinity, - child: ElevatedButton( + child: _buildActionButton( + label: 'DAFTAR', onPressed: _isLoading ? null : _handleRegister, - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF1565C0), - foregroundColor: Colors.white, - padding: const EdgeInsets.symmetric(vertical: 16), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(14), - ), - elevation: 0, - ), - child: _isLoading - ? const SizedBox( - height: 20, - width: 20, - child: CircularProgressIndicator( - valueColor: - AlwaysStoppedAnimation(Colors.white), - strokeWidth: 2, - ), - ) - : const Text( - 'DAFTAR', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w700, - letterSpacing: 0.5, - ), - ), ), ), + + const SizedBox(height: 24), + + // Info card + _buildInfoCard(), + const SizedBox(height: 20), + + // Link ke login Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -206,9 +205,7 @@ class _RegisterScreenState extends State { GestureDetector( onTap: () => Navigator.pushReplacement( context, - MaterialPageRoute( - builder: (context) => const LoginScreen(), - ), + MaterialPageRoute(builder: (_) => const LoginScreen()), ), child: const Text( 'Masuk', @@ -226,9 +223,10 @@ class _RegisterScreenState extends State { ), ), ), - ], - ), - ); + ), + ], + ), + ); } Widget _buildTextField({ @@ -238,6 +236,7 @@ class _RegisterScreenState extends State { bool obscureText = false, IconData? prefixIcon, Widget? suffixIcon, + String? Function(String?)? validator, }) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -251,10 +250,11 @@ class _RegisterScreenState extends State { ), ), const SizedBox(height: 8), - TextField( + TextFormField( controller: controller, keyboardType: keyboardType, obscureText: obscureText, + validator: validator, decoration: InputDecoration( prefixIcon: prefixIcon != null ? Icon(prefixIcon, color: const Color(0xFF1565C0), size: 20) @@ -274,6 +274,14 @@ class _RegisterScreenState extends State { borderRadius: BorderRadius.circular(14), borderSide: const BorderSide(color: Color(0xFF1565C0), width: 1.5), ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(14), + borderSide: const BorderSide(color: Color(0xFFEF5350)), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(14), + borderSide: const BorderSide(color: Color(0xFFEF5350), width: 1.5), + ), contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 15), ), ), @@ -281,107 +289,187 @@ class _RegisterScreenState extends State { ); } + Widget _buildActionButton({ + required String label, + required VoidCallback? onPressed, + }) { + return ElevatedButton( + onPressed: onPressed, + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF1565C0), + foregroundColor: Colors.white, + padding: const EdgeInsets.symmetric(vertical: 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)), + elevation: 0, + disabledBackgroundColor: Colors.grey[300], + shadowColor: const Color(0xFF1565C0).withOpacity(0.3), + ), + child: _isLoading + ? const SpinKitThreeBounce(color: Colors.white, size: 20) + : Text( + label, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + letterSpacing: 0.5, + ), + ), + ); + } + + Widget _buildInfoCard() { + return Container( + padding: const EdgeInsets.all(18), + decoration: BoxDecoration( + color: const Color(0xFFF7F8FC), + borderRadius: BorderRadius.circular(16), + border: Border.all(color: const Color(0xFFE0E0E0)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: const Color(0xFF1565C0).withOpacity(0.08), + borderRadius: BorderRadius.circular(12), + ), + child: const Icon(Icons.school_rounded, color: Color(0xFF1565C0), size: 22), + ), + const SizedBox(width: 12), + const Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Untuk Mahasiswa', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w700, + color: Color(0xFF1A1A2E), + ), + ), + Text( + 'Politeknik Negeri Jember', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: Color(0xFF1565C0), + ), + ), + ], + ), + ), + ], + ), + const SizedBox(height: 16), + _buildInfoItem(Icons.home_rounded, 'Temukan Kontrakan Terbaik', + 'Rekomendasi kontrakan terdekat dari kampus'), + const SizedBox(height: 10), + _buildInfoItem(Icons.local_laundry_service_rounded, 'Cari Laundry Terpercaya', + 'Temukan laundry dengan kualitas terbaik'), + const SizedBox(height: 10), + _buildInfoItem(Icons.analytics_rounded, 'Metode SAW', + 'Rekomendasi berdasarkan preferensi Anda'), + ], + ), + ); + } + + Widget _buildInfoItem(IconData icon, String title, String description) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(icon, color: const Color(0xFF1565C0).withOpacity(0.6), size: 18), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title, + style: const TextStyle( + fontSize: 13, fontWeight: FontWeight.w600, color: Color(0xFF1A1A2E))), + const SizedBox(height: 2), + Text(description, + style: TextStyle(fontSize: 12, color: Colors.grey[500], height: 1.3)), + ], + ), + ), + ], + ); + } + Future _handleRegister() async { - final name = _nameController.text.trim(); - final email = _emailController.text.trim(); - final password = _passwordController.text; - final confirmPassword = _confirmPasswordController.text; + if (!_formKey.currentState!.validate()) return; - if (name.isEmpty) { - _showError('Nama tidak boleh kosong'); - return; - } - if (email.isEmpty) { - _showError('Email tidak boleh kosong'); - return; - } - if (password.isEmpty) { - _showError('Password tidak boleh kosong'); - return; - } - if (password.length < 6) { - _showError('Password minimal 6 karakter'); - return; - } - if (password != confirmPassword) { - _showError('Password tidak cocok'); - return; - } - - setState(() { - _isLoading = true; - }); + setState(() => _isLoading = true); try { final result = await _authService.register( - name: name, - email: email, - password: password, - passwordConfirmation: confirmPassword, + name: _nameController.text.trim(), + email: _emailController.text.trim(), + password: _passwordController.text, + passwordConfirmation: _confirmPasswordController.text, ); if (!mounted) return; if (result['success'] == true) { - _showSuccess('Registrasi berhasil! Selamat datang!'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: const Row( + children: [ + Icon(Icons.check_circle_rounded, color: Colors.white, size: 20), + SizedBox(width: 10), + Text('Registrasi berhasil! Selamat datang!'), + ], + ), + backgroundColor: const Color(0xFF2E7D32), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + duration: const Duration(seconds: 2), + ), + ); await Future.delayed(const Duration(seconds: 1)); if (mounted) { Navigator.pushReplacement( context, - MaterialPageRoute(builder: (context) => const MobileHomeScreen()), + MaterialPageRoute(builder: (_) => const ImprovedHomeScreen()), ); } } else { - final message = result['message'] ?? 'Registrasi gagal'; - _showError(message); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + const Icon(Icons.error_outline_rounded, color: Colors.white, size: 20), + const SizedBox(width: 10), + Expanded(child: Text(result['message'] ?? 'Registrasi gagal')), + ], + ), + backgroundColor: const Color(0xFFC62828), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + duration: const Duration(seconds: 3), + ), + ); } } catch (e) { - _showError('Error: $e'); - } finally { if (mounted) { - setState(() { - _isLoading = false; - }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Error: $e'), + backgroundColor: const Color(0xFFC62828), + ), + ); } + } finally { + if (mounted) setState(() => _isLoading = false); } } - - void _showError(String message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Row( - children: [ - const Icon(Icons.error_outline_rounded, color: Colors.white, size: 20), - const SizedBox(width: 10), - Expanded(child: Text(message)), - ], - ), - backgroundColor: const Color(0xFFC62828), - behavior: SnackBarBehavior.floating, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - margin: const EdgeInsets.all(16), - duration: const Duration(seconds: 3), - ), - ); - } - - void _showSuccess(String message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Row( - children: [ - const Icon(Icons.check_circle_rounded, color: Colors.white, size: 20), - const SizedBox(width: 10), - Expanded(child: Text(message)), - ], - ), - backgroundColor: const Color(0xFF2E7D32), - behavior: SnackBarBehavior.floating, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - margin: const EdgeInsets.all(16), - duration: const Duration(seconds: 2), - ), - ); - } } diff --git a/spk_mobile/lib/screens/booking_form_screen.dart b/spk_mobile/lib/screens/booking_form_screen.dart index 017d226..45c03bc 100644 --- a/spk_mobile/lib/screens/booking_form_screen.dart +++ b/spk_mobile/lib/screens/booking_form_screen.dart @@ -72,7 +72,7 @@ class _BookingFormScreenState extends State { }, ); - if (picked != null) { + if (picked != null && mounted) { setState(() => _tanggalMulai = picked); } } @@ -118,15 +118,25 @@ class _BookingFormScreenState extends State { if (source == null) return; - final picked = await _imagePicker.pickImage( - source: source, - maxWidth: 1920, - maxHeight: 1920, - imageQuality: 85, - ); + try { + final picked = await _imagePicker.pickImage( + source: source, + maxWidth: 1920, + maxHeight: 1920, + imageQuality: 85, + ); - if (picked != null) { - setState(() => _paymentProofImage = File(picked.path)); + if (picked != null && mounted) { + setState(() => _paymentProofImage = File(picked.path)); + } + } catch (e) { + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Gagal memilih gambar: $e'), + backgroundColor: Colors.red, + ), + ); } } @@ -218,25 +228,25 @@ class _BookingFormScreenState extends State { ), ); - if (confirmed != true) return; + if (confirmed != true || !mounted) return; setState(() => _isSubmitting = true); - final result = await _bookingService.createBooking( - kontrakanId: widget.kontrakan.id, - tanggalMulai: _tanggalMulai!, - durasiBulan: _durasiBulan, - catatan: _catatanController.text.isNotEmpty - ? _catatanController.text - : null, - paymentProof: _paymentProofImage, - ); + try { + final result = await _bookingService.createBooking( + kontrakanId: widget.kontrakan.id, + tanggalMulai: _tanggalMulai!, + durasiBulan: _durasiBulan, + catatan: _catatanController.text.isNotEmpty + ? _catatanController.text + : null, + paymentProof: _paymentProofImage, + ); - setState(() => _isSubmitting = false); + if (!mounted) return; + setState(() => _isSubmitting = false); - if (!mounted) return; - - if (result['success'] == true) { + if (result['success'] == true) { showDialog( context: context, barrierDismissible: false, @@ -304,6 +314,16 @@ class _BookingFormScreenState extends State { ), ); } + } catch (e) { + if (!mounted) return; + setState(() => _isSubmitting = false); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Error: ${e.toString()}'), + backgroundColor: Colors.red, + ), + ); + } } Widget _buildConfirmRow(String label, String value) { diff --git a/spk_mobile/lib/screens/booking_history_screen.dart b/spk_mobile/lib/screens/booking_history_screen.dart index 94a34ec..ce9bd0e 100644 --- a/spk_mobile/lib/screens/booking_history_screen.dart +++ b/spk_mobile/lib/screens/booking_history_screen.dart @@ -38,16 +38,32 @@ class _BookingHistoryScreenState extends State Future _loadBookings() async { setState(() => _isLoading = true); - final bookings = await _bookingService.getBookingHistory(); - setState(() { - _activeBookings = bookings - .where((b) => b.status == 'confirmed' || b.status == 'pending') - .toList(); - _pastBookings = bookings - .where((b) => b.status == 'completed' || b.status == 'cancelled') - .toList(); - _isLoading = false; - }); + try { + final bookings = await _bookingService.getBookingHistory(); + if (!mounted) return; + setState(() { + _activeBookings = bookings + .where((b) => b.status == 'confirmed' || b.status == 'pending') + .toList(); + _pastBookings = bookings + .where((b) => b.status == 'completed' || b.status == 'cancelled') + .toList(); + _isLoading = false; + }); + } catch (e) { + debugPrint('Load bookings error: $e'); + if (!mounted) return; + setState(() => _isLoading = false); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: const Text('Gagal memuat riwayat booking'), + backgroundColor: Colors.red[700], + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); + } } Future _cancelBooking(int bookingId) async { @@ -91,8 +107,9 @@ class _BookingHistoryScreenState extends State ), ); if (confirm != true) return; - final result = await _bookingService.cancelBooking(bookingId); - if (mounted) { + try { + final result = await _bookingService.cancelBooking(bookingId); + if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( @@ -119,6 +136,17 @@ class _BookingHistoryScreenState extends State ), ); if (result['success'] == true) _loadBookings(); + } catch (e) { + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Gagal membatalkan booking: $e'), + backgroundColor: const Color(0xFFC62828), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); } } @@ -216,12 +244,14 @@ class _BookingHistoryScreenState extends State ); if (picked == null) return; + if (!mounted) return; setState(() => _uploadingBookingId = booking.id); - final result = await _bookingService.uploadPaymentProof( - booking.id, - File(picked.path), - ); - if (mounted) { + try { + final result = await _bookingService.uploadPaymentProof( + booking.id, + File(picked.path), + ); + if (!mounted) return; setState(() => _uploadingBookingId = null); ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -250,6 +280,18 @@ class _BookingHistoryScreenState extends State ), ); if (result['success'] == true) _loadBookings(); + } catch (e) { + if (!mounted) return; + setState(() => _uploadingBookingId = null); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Gagal upload bukti pembayaran: $e'), + backgroundColor: const Color(0xFFC62828), + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); } } diff --git a/spk_mobile/lib/screens/change_password_screen.dart b/spk_mobile/lib/screens/change_password_screen.dart index 06d7fe1..f77de84 100644 --- a/spk_mobile/lib/screens/change_password_screen.dart +++ b/spk_mobile/lib/screens/change_password_screen.dart @@ -29,27 +29,37 @@ class _ChangePasswordScreenState extends State { setState(() => _isLoading = true); - final result = await _authService.changePassword( - password: _passwordController.text, - passwordConfirmation: _confirmController.text, - ); - - setState(() => _isLoading = false); - - if (!mounted) return; - - if (result['success'] == true) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Password berhasil diubah'), - backgroundColor: Colors.green, - ), + try { + final result = await _authService.changePassword( + password: _passwordController.text, + passwordConfirmation: _confirmController.text, ); - Navigator.pop(context); - } else { + + if (!mounted) return; + setState(() => _isLoading = false); + + if (result['success'] == true) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Password berhasil diubah'), + backgroundColor: Colors.green, + ), + ); + Navigator.pop(context); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal mengubah password'), + backgroundColor: Colors.red, + ), + ); + } + } catch (e) { + if (!mounted) return; + setState(() => _isLoading = false); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(result['message'] ?? 'Gagal mengubah password'), + content: Text('Terjadi kesalahan: $e'), backgroundColor: Colors.red, ), ); diff --git a/spk_mobile/lib/screens/edit_profile_screen.dart b/spk_mobile/lib/screens/edit_profile_screen.dart index 770d1f2..a12ec63 100644 --- a/spk_mobile/lib/screens/edit_profile_screen.dart +++ b/spk_mobile/lib/screens/edit_profile_screen.dart @@ -39,30 +39,40 @@ class _EditProfileScreenState extends State { setState(() => _isLoading = true); - final result = await _authService.updateProfile( - name: _nameController.text.trim(), - email: _emailController.text.trim(), - phone: _phoneController.text.trim().isEmpty - ? null - : _phoneController.text.trim(), - ); - - setState(() => _isLoading = false); - - if (!mounted) return; - - if (result['success'] == true) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Profil berhasil diperbarui'), - backgroundColor: Colors.green, - ), + try { + final result = await _authService.updateProfile( + name: _nameController.text.trim(), + email: _emailController.text.trim(), + phone: _phoneController.text.trim().isEmpty + ? null + : _phoneController.text.trim(), ); - Navigator.pop(context, true); - } else { + + if (!mounted) return; + setState(() => _isLoading = false); + + if (result['success'] == true) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Profil berhasil diperbarui'), + backgroundColor: Colors.green, + ), + ); + Navigator.pop(context, true); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal memperbarui profil'), + backgroundColor: Colors.red, + ), + ); + } + } catch (e) { + if (!mounted) return; + setState(() => _isLoading = false); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(result['message'] ?? 'Gagal memperbarui profil'), + content: Text('Terjadi kesalahan: $e'), backgroundColor: Colors.red, ), ); @@ -109,7 +119,9 @@ class _EditProfileScreenState extends State { radius: 45, backgroundColor: Colors.white, child: Text( - widget.user.name.substring(0, 1).toUpperCase(), + widget.user.name.isNotEmpty + ? widget.user.name.substring(0, 1).toUpperCase() + : 'U', style: const TextStyle( fontSize: 32, fontWeight: FontWeight.bold, diff --git a/spk_mobile/lib/screens/favorites_screen.dart b/spk_mobile/lib/screens/favorites_screen.dart index 689aa60..0cf2f45 100644 --- a/spk_mobile/lib/screens/favorites_screen.dart +++ b/spk_mobile/lib/screens/favorites_screen.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import '../models/kontrakan.dart'; import '../models/laundry.dart'; import '../services/favorite_service.dart'; @@ -36,23 +36,46 @@ class _FavoritesScreenState extends State super.dispose(); } + String? _errorMessage; + Future _loadFavorites() async { - setState(() => _isLoading = true); - // Clear image cache agar foto terbaru selalu dimuat - await DefaultCacheManager().emptyCache(); - PaintingBinding.instance.imageCache.clear(); - PaintingBinding.instance.imageCache.clearLiveImages(); + if (!mounted) return; + setState(() { + _isLoading = true; + _errorMessage = null; + }); try { final result = await _favoriteService.getFavoritesWithModels(); + if (!mounted) return; + + if (result['success'] == true) { + setState(() { + _kontrakanFavorites = result['kontrakan'] is List + ? result['kontrakan'] as List + : []; + _laundryFavorites = result['laundry'] is List + ? result['laundry'] as List + : []; + _isLoading = false; + }); + debugPrint('[FAV_SCREEN] Loaded ${_kontrakanFavorites.length} kontrakan, ${_laundryFavorites.length} laundry'); + } else { + setState(() { + _kontrakanFavorites = []; + _laundryFavorites = []; + _errorMessage = result['message']?.toString() ?? 'Gagal memuat favorit'; + _isLoading = false; + }); + debugPrint('[FAV_SCREEN] ❌ Load failed: $_errorMessage'); + } + } catch (e) { + debugPrint('[FAV_SCREEN] ❌ Exception: $e'); if (mounted) { setState(() { - _kontrakanFavorites = (result['kontrakan'] as List?) ?? []; - _laundryFavorites = (result['laundry'] as List?) ?? []; + _errorMessage = 'Terjadi kesalahan: $e'; _isLoading = false; }); } - } catch (e) { - if (mounted) setState(() => _isLoading = false); } } @@ -93,15 +116,18 @@ class _FavoritesScreenState extends State ), ); if (confirm != true) return; + if (!mounted) return; - Map result; - if (type == 'kontrakan') { - result = await _favoriteService.toggleKontrakanFavorite(itemId); - } else { - result = await _favoriteService.toggleLaundryFavorite(itemId); - } + try { + Map result; + if (type == 'kontrakan') { + result = await _favoriteService.toggleKontrakanFavorite(itemId); + } else { + result = await _favoriteService.toggleLaundryFavorite(itemId); + } - if (mounted && result['success'] == true) { + if (!mounted) return; + if (result['success'] == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( @@ -123,7 +149,19 @@ class _FavoritesScreenState extends State margin: const EdgeInsets.all(16), ), ); - _loadFavorites(); + _loadFavorites(); + } + } catch (e) { + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: const Text('Gagal menghapus favorit'), + backgroundColor: Colors.red.shade600, + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); } } @@ -262,10 +300,45 @@ class _FavoritesScreenState extends State color: Color(0xFF1565C0), ), ) - : TabBarView( - controller: _tabController, - children: [_buildKontrakanList(), _buildLaundryList()], - ), + : _errorMessage != null + ? Center( + child: Padding( + padding: const EdgeInsets.all(32), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.error_outline_rounded, + size: 56, color: Colors.red.shade300), + const SizedBox(height: 16), + Text( + _errorMessage!, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 15, + color: Colors.grey[600], + ), + ), + const SizedBox(height: 20), + ElevatedButton.icon( + onPressed: _loadFavorites, + icon: const Icon(Icons.refresh_rounded), + label: const Text('Coba Lagi'), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF1565C0), + foregroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + ), + ], + ), + ), + ) + : TabBarView( + controller: _tabController, + children: [_buildKontrakanList(), _buildLaundryList()], + ), ), ], ), diff --git a/spk_mobile/lib/screens/improved_home_screen.dart b/spk_mobile/lib/screens/improved_home_screen.dart index 56b33c8..72a592c 100644 --- a/spk_mobile/lib/screens/improved_home_screen.dart +++ b/spk_mobile/lib/screens/improved_home_screen.dart @@ -42,13 +42,16 @@ class _ImprovedHomeScreenState extends State { _loadData(); } - Future _loadData() async { + Future _loadData({bool clearCache = false}) async { setState(() => _isLoading = true); - // Clear image cache agar foto terbaru dari server selalu dimuat - await DefaultCacheManager().emptyCache(); - PaintingBinding.instance.imageCache.clear(); - PaintingBinding.instance.imageCache.clearLiveImages(); + // Clear image cache hanya saat user eksplisit refresh (pull-to-refresh) + if (clearCache) { + await DefaultCacheManager().emptyCache(); + PaintingBinding.instance.imageCache.clear(); + PaintingBinding.instance.imageCache.clearLiveImages(); + } await Future.wait([_loadKontrakan(), _loadLaundry(), _loadFavoriteIds()]); + if (!mounted) return; setState(() => _isLoading = false); } @@ -56,6 +59,7 @@ class _ImprovedHomeScreenState extends State { try { if (!_authService.isAuthenticated) return; final ids = await _favoriteService.getFavoriteIds(); + if (!mounted) return; setState(() { _favKontrakanIds = (ids['kontrakan'] ?? []).toSet(); _favLaundryIds = (ids['laundry'] ?? []).toSet(); @@ -66,6 +70,14 @@ class _ImprovedHomeScreenState extends State { } Future _toggleKontrakanFav(int id) async { + if (!_authService.isAuthenticated) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Silakan login terlebih dahulu'), backgroundColor: Colors.orange), + ); + } + return; + } final wasFav = _favKontrakanIds.contains(id); setState(() { if (wasFav) { @@ -74,19 +86,44 @@ class _ImprovedHomeScreenState extends State { _favKontrakanIds.add(id); } }); - final result = await _favoriteService.toggleKontrakanFavorite(id); - if (result['success'] != true && mounted) { - setState(() { - if (wasFav) { - _favKontrakanIds.add(id); - } else { - _favKontrakanIds.remove(id); - } - }); + try { + final result = await _favoriteService.toggleKontrakanFavorite(id); + if (result['success'] != true && mounted) { + setState(() { + if (wasFav) { + _favKontrakanIds.add(id); + } else { + _favKontrakanIds.remove(id); + } + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal mengubah favorit'), + backgroundColor: Colors.red.shade600, + ), + ); + } + } catch (e) { + if (mounted) { + setState(() { + if (wasFav) _favKontrakanIds.add(id); else _favKontrakanIds.remove(id); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error: $e'), backgroundColor: Colors.red.shade600), + ); + } } } Future _toggleLaundryFav(int id) async { + if (!_authService.isAuthenticated) { + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Silakan login terlebih dahulu'), backgroundColor: Colors.orange), + ); + } + return; + } final wasFav = _favLaundryIds.contains(id); setState(() { if (wasFav) { @@ -95,21 +132,39 @@ class _ImprovedHomeScreenState extends State { _favLaundryIds.add(id); } }); - final result = await _favoriteService.toggleLaundryFavorite(id); - if (result['success'] != true && mounted) { - setState(() { - if (wasFav) { - _favLaundryIds.add(id); - } else { - _favLaundryIds.remove(id); - } - }); + try { + final result = await _favoriteService.toggleLaundryFavorite(id); + if (result['success'] != true && mounted) { + setState(() { + if (wasFav) { + _favLaundryIds.add(id); + } else { + _favLaundryIds.remove(id); + } + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal mengubah favorit'), + backgroundColor: Colors.red.shade600, + ), + ); + } + } catch (e) { + if (mounted) { + setState(() { + if (wasFav) _favLaundryIds.add(id); else _favLaundryIds.remove(id); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error: $e'), backgroundColor: Colors.red.shade600), + ); + } } } Future _loadKontrakan() async { try { final list = await _kontrakanService.getKontrakan(); + if (!mounted) return; setState(() => _kontrakanList = list.take(6).toList()); } catch (e) { // Error loading kontrakan silently @@ -119,6 +174,7 @@ class _ImprovedHomeScreenState extends State { Future _loadLaundry() async { try { final list = await _laundryService.getLaundry(); + if (!mounted) return; setState(() => _laundryList = list.take(6).toList()); } catch (e) { // Error loading laundry silently @@ -154,7 +210,7 @@ class _ImprovedHomeScreenState extends State { // ────────────── HOME CONTENT ────────────── Widget _buildHomeContent() { return RefreshIndicator( - onRefresh: _loadData, + onRefresh: () => _loadData(clearCache: true), child: CustomScrollView( slivers: [ // ── Gradient Header ── @@ -716,63 +772,6 @@ class _ImprovedHomeScreenState extends State { ); } - // ────────────── SERVICE TILE ────────────── - Widget _buildServiceTile({ - required IconData icon, - required String label, - required Color color, - required Color bgColor, - required VoidCallback onTap, - }) { - return GestureDetector( - onTap: onTap, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16), - border: Border.all(color: color.withOpacity(0.12)), - boxShadow: [ - BoxShadow( - color: color.withOpacity(0.08), - blurRadius: 12, - offset: const Offset(0, 4), - ), - ], - ), - child: Row( - children: [ - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: bgColor, - borderRadius: BorderRadius.circular(12), - ), - child: Icon(icon, color: color, size: 22), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - label, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w700, - color: color, - height: 1.3, - ), - ), - ), - Icon( - Icons.arrow_forward_ios_rounded, - size: 14, - color: color.withOpacity(0.5), - ), - ], - ), - ), - ); - } - // ────────────── SERVICE TILE INTEGRATED ────────────── Widget _buildServiceTileIntegrated({ required IconData icon, diff --git a/spk_mobile/lib/screens/kontrakan_detail_screen.dart b/spk_mobile/lib/screens/kontrakan_detail_screen.dart index 7e0d074..8f0a3bf 100644 --- a/spk_mobile/lib/screens/kontrakan_detail_screen.dart +++ b/spk_mobile/lib/screens/kontrakan_detail_screen.dart @@ -7,6 +7,10 @@ import '../services/auth_service.dart'; import '../services/favorite_service.dart'; import 'booking_form_screen.dart'; +// Koordinat resmi Kampus Polije (Politeknik Negeri Jember) +const double _polije_lat = -8.1599551; +const double _polije_lng = 113.7230733; + class KontrakanDetailScreen extends StatefulWidget { final Kontrakan kontrakan; @@ -17,11 +21,7 @@ class KontrakanDetailScreen extends StatefulWidget { } class _KontrakanDetailScreenState extends State { - double? userLat; - double? userLng; - double? distance; - bool isLoadingLocation = false; - String? locationError; + double? distance; // jarak dari kampus Polije ke kontrakan ini bool _isFavorite = false; bool _isFavLoading = false; final _favoriteService = FavoriteService(); @@ -30,53 +30,96 @@ class _KontrakanDetailScreenState extends State { void initState() { super.initState(); _checkFavorite(); + _calcDistanceFromPolije(); + } + + /// Hitung jarak dari Kampus Polije ke kontrakan ini secara langsung. + void _calcDistanceFromPolije() { + if (widget.kontrakan.latitude == null || widget.kontrakan.longitude == null) return; + final dist = LocationService.calculateDistance( + _polije_lat, + _polije_lng, + widget.kontrakan.latitude!, + widget.kontrakan.longitude!, + ); + setState(() => distance = dist); } Future _checkFavorite() async { - final result = await _favoriteService.isKontrakanFavorite( - widget.kontrakan.id, - ); - if (mounted) setState(() => _isFavorite = result); + try { + final result = await _favoriteService.isKontrakanFavorite( + widget.kontrakan.id, + ); + if (mounted) setState(() => _isFavorite = result); + } catch (e) { + debugPrint('Check favorite error: $e'); + } } Future _toggleFavorite() async { setState(() => _isFavLoading = true); - final result = await _favoriteService.toggleKontrakanFavorite( - widget.kontrakan.id, - ); - if (mounted) { - setState(() { - _isFavLoading = false; - if (result['success'] == true) { + try { + final result = await _favoriteService.toggleKontrakanFavorite( + widget.kontrakan.id, + ); + if (!mounted) return; + + if (result['success'] == true) { + setState(() { _isFavorite = result['isFavorite'] ?? !_isFavorite; - } - }); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + Icon( + _isFavorite + ? Icons.favorite_rounded + : Icons.favorite_border_rounded, + color: Colors.white, + size: 20, + ), + const SizedBox(width: 10), + Text(result['message'] ?? 'Status favorit diubah'), + ], + ), + backgroundColor: _isFavorite + ? const Color(0xFF1565C0) + : Colors.grey[700], + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + margin: const EdgeInsets.all(16), + duration: const Duration(seconds: 2), + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal mengubah favorit'), + backgroundColor: Colors.red[700], + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); + } + } catch (e) { + if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Row( - children: [ - Icon( - _isFavorite - ? Icons.favorite_rounded - : Icons.favorite_border_rounded, - color: Colors.white, - size: 20, - ), - const SizedBox(width: 10), - Text(result['message'] ?? 'Status favorit diubah'), - ], - ), - backgroundColor: _isFavorite - ? const Color(0xFF1565C0) - : Colors.grey[700], + content: Text('Gagal: $e'), + backgroundColor: Colors.red[700], behavior: SnackBarBehavior.floating, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), margin: const EdgeInsets.all(16), - duration: const Duration(seconds: 2), ), ); + } finally { + if (mounted) setState(() => _isFavLoading = false); } } @@ -423,10 +466,10 @@ class _KontrakanDetailScreenState extends State { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( - color: Colors.purple.withValues(alpha: 0.1), + color: const Color(0xFF1565C0).withValues(alpha: 0.08), borderRadius: BorderRadius.circular(12), border: Border.all( - color: Colors.purple.withValues(alpha: 0.3), + color: const Color(0xFF1565C0).withValues(alpha: 0.3), width: 1, ), ), @@ -434,114 +477,83 @@ class _KontrakanDetailScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Row( - children: [ - Icon(Icons.location_on, color: Colors.purple, size: 24), - const SizedBox(width: 12), - Text( - 'Deteksi Lokasi Saya', - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: Colors.black87, - ), - ), - ], - ), - if (isLoadingLocation) - SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - strokeWidth: 2, - valueColor: AlwaysStoppedAnimation(Colors.purple), - ), + const Icon(Icons.school_rounded, color: Color(0xFF1565C0), size: 22), + const SizedBox(width: 10), + const Text( + 'Jarak dari Kampus Polije', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: Color(0xFF1565C0), ), + ), ], ), const SizedBox(height: 12), - if (distance != null) ...[ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Colors.green.withValues(alpha: 0.1), - borderRadius: BorderRadius.circular(8), - ), - child: Row( - children: [ - Icon(Icons.check_circle, color: Colors.green, size: 20), - const SizedBox(width: 10), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Jarak dari Lokasi Saya', - style: TextStyle(fontSize: 12, color: Colors.grey[600]), - ), - Text( - distance! < 1 - ? '${(distance! * 1000).toStringAsFixed(0)} m' - : '${distance!.toStringAsFixed(2)} km', - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: Colors.green, - ), - ), - ], - ), - ], - ), - ), - ] else if (locationError != null) ...[ - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Colors.red.withValues(alpha: 0.1), - borderRadius: BorderRadius.circular(8), - ), - child: Row( - children: [ - Icon(Icons.error, color: Colors.red, size: 20), - const SizedBox(width: 10), - Expanded( - child: Text( - locationError!, - style: const TextStyle(fontSize: 13, color: Colors.red), - ), - ), - ], - ), - ), - ], - const SizedBox(height: 12), - SizedBox( + Container( width: double.infinity, - height: 44, - child: ElevatedButton.icon( - onPressed: isLoadingLocation ? null : _detectLocation, - icon: Icon( - isLoadingLocation ? Icons.hourglass_bottom : Icons.my_location, - size: 20, - ), - label: Text( - isLoadingLocation ? 'Mendeteksi...' : 'Deteksi Lokasi Saya', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, - ), - ), - style: ElevatedButton.styleFrom( - backgroundColor: Colors.purple, - foregroundColor: Colors.white, - disabledBackgroundColor: Colors.grey, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: const Color(0xFF1565C0).withValues(alpha: 0.15), ), ), + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: const Color(0xFF1565C0).withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: const Icon( + Icons.directions_walk_rounded, + color: Color(0xFF1565C0), + size: 20, + ), + ), + const SizedBox(width: 12), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + 'Politeknik Negeri Jember', + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + const SizedBox(height: 2), + Text( + distance == null + ? '-' + : distance! < 1 + ? '${(distance! * 1000).toStringAsFixed(0)} meter' + : '${distance!.toStringAsFixed(2)} km', + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: Color(0xFF1565C0), + ), + ), + ], + ), + ], + ), + ), + const SizedBox(height: 8), + Row( + children: [ + Icon(Icons.location_pin, size: 13, color: Colors.grey[500]), + const SizedBox(width: 4), + Text( + 'Jl. Mastrip No.164, Sumbersari, Jember', + style: TextStyle(fontSize: 11, color: Colors.grey[500]), + ), + ], ), ], ), @@ -577,51 +589,4 @@ class _KontrakanDetailScreenState extends State { } } - Future _detectLocation() async { - setState(() { - isLoadingLocation = true; - locationError = null; - }); - - try { - final locationService = LocationService(); - final isEnabled = await locationService.isLocationServiceEnabled(); - - if (!isEnabled) { - setState(() { - locationError = 'Layanan lokasi tidak aktif'; - isLoadingLocation = false; - }); - return; - } - - final position = await locationService.getCurrentLocation(); - - if (position != null) { - final dist = LocationService.calculateDistance( - position.latitude, - position.longitude, - widget.kontrakan.latitude!, - widget.kontrakan.longitude!, - ); - - setState(() { - userLat = position.latitude; - userLng = position.longitude; - distance = dist; - isLoadingLocation = false; - }); - } else { - setState(() { - locationError = 'Gagal mendapatkan lokasi Anda'; - isLoadingLocation = false; - }); - } - } catch (e) { - setState(() { - locationError = 'Error: ${e.toString()}'; - isLoadingLocation = false; - }); - } - } } diff --git a/spk_mobile/lib/screens/laundry_detail_screen.dart b/spk_mobile/lib/screens/laundry_detail_screen.dart index d02eef0..2951c9f 100644 --- a/spk_mobile/lib/screens/laundry_detail_screen.dart +++ b/spk_mobile/lib/screens/laundry_detail_screen.dart @@ -30,48 +30,78 @@ class _LaundryDetailScreenState extends State { } Future _checkFavorite() async { - final result = await _favoriteService.isLaundryFavorite(widget.laundry.id); - if (mounted) setState(() => _isFavorite = result); + try { + final result = await _favoriteService.isLaundryFavorite(widget.laundry.id); + if (mounted) setState(() => _isFavorite = result); + } catch (e) { + debugPrint('Check favorite error: $e'); + } } Future _toggleFavorite() async { setState(() => _isFavLoading = true); - final result = await _favoriteService.toggleLaundryFavorite( - widget.laundry.id, - ); - if (mounted) { - setState(() { - _isFavLoading = false; - if (result['success'] == true) { + try { + final result = await _favoriteService.toggleLaundryFavorite( + widget.laundry.id, + ); + if (!mounted) return; + + if (result['success'] == true) { + setState(() { _isFavorite = result['isFavorite'] ?? !_isFavorite; - } - }); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + Icon( + _isFavorite + ? Icons.favorite_rounded + : Icons.favorite_border_rounded, + color: Colors.white, + size: 20, + ), + const SizedBox(width: 10), + Text(result['message'] ?? 'Status favorit diubah'), + ], + ), + backgroundColor: _isFavorite + ? const Color(0xFF00897B) + : Colors.grey[700], + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + margin: const EdgeInsets.all(16), + duration: const Duration(seconds: 2), + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(result['message'] ?? 'Gagal mengubah favorit'), + backgroundColor: Colors.red[700], + behavior: SnackBarBehavior.floating, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + margin: const EdgeInsets.all(16), + ), + ); + } + } catch (e) { + if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Row( - children: [ - Icon( - _isFavorite - ? Icons.favorite_rounded - : Icons.favorite_border_rounded, - color: Colors.white, - size: 20, - ), - const SizedBox(width: 10), - Text(result['message'] ?? 'Status favorit diubah'), - ], - ), - backgroundColor: _isFavorite - ? const Color(0xFF00897B) - : Colors.grey[700], + content: Text('Gagal: $e'), + backgroundColor: Colors.red[700], behavior: SnackBarBehavior.floating, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), margin: const EdgeInsets.all(16), - duration: const Duration(seconds: 2), ), ); + } finally { + if (mounted) setState(() => _isFavLoading = false); } } @@ -519,6 +549,7 @@ class _LaundryDetailScreenState extends State { final locationService = LocationService(); final isEnabled = await locationService.isLocationServiceEnabled(); + if (!mounted) return; if (!isEnabled) { setState(() { locationError = 'Layanan lokasi tidak aktif'; @@ -529,6 +560,7 @@ class _LaundryDetailScreenState extends State { final position = await locationService.getCurrentLocation(); + if (!mounted) return; if (position != null) { final dist = LocationService.calculateDistance( position.latitude, @@ -550,6 +582,7 @@ class _LaundryDetailScreenState extends State { }); } } catch (e) { + if (!mounted) return; setState(() { locationError = 'Error: ${e.toString()}'; isLoadingLocation = false; @@ -700,7 +733,9 @@ class _LaundryDetailScreenState extends State { } Future _launchWhatsApp(String phone) async { - final url = 'https://wa.me/$phone'; + final cleaned = phone.replaceAll(RegExp(r'[^0-9]'), ''); + final formatted = cleaned.startsWith('0') ? '62${cleaned.substring(1)}' : cleaned; + final url = 'https://wa.me/$formatted'; if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication); } diff --git a/spk_mobile/lib/screens/laundry_list_screen.dart b/spk_mobile/lib/screens/laundry_list_screen.dart index 4595ee5..f34b0dd 100644 --- a/spk_mobile/lib/screens/laundry_list_screen.dart +++ b/spk_mobile/lib/screens/laundry_list_screen.dart @@ -33,38 +33,54 @@ class _LaundryListScreenState extends State { Future _loadLaundry() async { setState(() => _isLoading = true); - final list = await _laundryService.getLaundry(); - setState(() { - _laundryList = list; - _filteredList = list; - _isLoading = false; - }); + try { + final list = await _laundryService.getLaundry(); + if (!mounted) return; + setState(() { + _laundryList = list; + _filteredList = List.from(list); + _applySortInPlace(_sortBy); // apply current sort + _isLoading = false; + }); + } catch (e) { + debugPrint('Load laundry error: $e'); + if (!mounted) return; + setState(() => _isLoading = false); + } } void _filterList(String query) { setState(() { if (query.isEmpty) { - _filteredList = _laundryList; + _filteredList = List.from(_laundryList); } else { _filteredList = _laundryList.where((laundry) { return laundry.nama.toLowerCase().contains(query.toLowerCase()) || laundry.alamat.toLowerCase().contains(query.toLowerCase()); }).toList(); } + _applySortInPlace(_sortBy); }); } void _sortList(String sortBy) { setState(() { - _sortBy = sortBy; - if (sortBy == 'rating') { - _filteredList.sort((a, b) => b.rating.compareTo(a.rating)); - } else if (sortBy == 'harga') { - _filteredList.sort((a, b) => a.hargaKiloan.compareTo(b.hargaKiloan)); - } + _applySortInPlace(sortBy); }); } + /// Internal sort helper — call within setState only + void _applySortInPlace(String sortBy) { + _sortBy = sortBy; + if (sortBy == 'rating') { + _filteredList.sort((a, b) => b.rating.compareTo(a.rating)); + } else if (sortBy == 'harga') { + _filteredList.sort((a, b) => a.hargaKiloan.compareTo(b.hargaKiloan)); + } else if (sortBy == 'jarak') { + _filteredList.sort((a, b) => a.jarakKampus.compareTo(b.jarakKampus)); + } + } + @override Widget build(BuildContext context) { return Scaffold( @@ -187,7 +203,7 @@ class _LaundryListScreenState extends State { ], ), Text( - 'Urut: ${_sortBy == "rating" ? "Rating" : "Harga"}', + 'Urut: ${_sortBy == "rating" ? "Rating" : _sortBy == "harga" ? "Harga" : "Jarak"}', style: TextStyle( fontSize: 13, color: Colors.grey[600], diff --git a/spk_mobile/lib/screens/profile_screen.dart b/spk_mobile/lib/screens/profile_screen.dart index 97f147f..38d4edc 100644 --- a/spk_mobile/lib/screens/profile_screen.dart +++ b/spk_mobile/lib/screens/profile_screen.dart @@ -1,10 +1,13 @@ import 'package:flutter/material.dart'; import '../services/auth_service.dart'; +import '../services/favorite_service.dart'; +import '../services/booking_service.dart'; import '../models/user.dart'; import '../login.dart'; import 'edit_profile_screen.dart'; import 'change_password_screen.dart'; import 'booking_history_screen.dart'; +import 'favorites_screen.dart'; class ProfileScreen extends StatefulWidget { const ProfileScreen({super.key}); @@ -13,323 +16,612 @@ class ProfileScreen extends StatefulWidget { State createState() => _ProfileScreenState(); } -class _ProfileScreenState extends State { +class _ProfileScreenState extends State + with SingleTickerProviderStateMixin { final _authService = AuthService(); + final _favoriteService = FavoriteService(); + final _bookingService = BookingService(); User? _currentUser; bool _isLoading = true; + int _totalFavorites = 0; + int _totalBookings = 0; + + late AnimationController _animController; + late Animation _fadeAnim; @override void initState() { super.initState(); - _loadUser(); + _animController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 600), + ); + _fadeAnim = CurvedAnimation(parent: _animController, curve: Curves.easeOut); + _loadAll(); + } + + @override + void dispose() { + _animController.dispose(); + super.dispose(); + } + + Future _loadAll() async { + setState(() => _isLoading = true); + try { + await Future.wait([_loadUser(), _loadStats()]); + } catch (_) {} + if (!mounted) return; + setState(() => _isLoading = false); + _animController.forward(from: 0); } Future _loadUser() async { - setState(() => _isLoading = true); - final user = await _authService.getCurrentUser(); - setState(() { - _currentUser = user; - _isLoading = false; - }); + try { + final user = await _authService.getCurrentUser(); + if (!mounted) return; + setState(() => _currentUser = user); + } catch (e) { + debugPrint('Load user error: $e'); + } + } + + Future _loadStats() async { + try { + final favResult = await _favoriteService.getFavoriteIds(); + final bookings = await _bookingService.getBookingHistory(); + if (!mounted) return; + setState(() { + _totalFavorites = (favResult['kontrakan']?.length ?? 0) + + (favResult['laundry']?.length ?? 0); + _totalBookings = bookings.length; + }); + } catch (e) { + debugPrint('Load stats error: $e'); + } + } + + String _getInitials(String name) { + if (name.isEmpty) return 'U'; + final parts = name.trim().split(' '); + if (parts.length >= 2) { + return '${parts[0][0]}${parts[1][0]}'.toUpperCase(); + } + return parts[0][0].toUpperCase(); + } + + String _getMemberSince(DateTime? date) { + if (date == null) return 'Baru bergabung'; + const months = [ + '', + 'Januari', + 'Februari', + 'Maret', + 'April', + 'Mei', + 'Juni', + 'Juli', + 'Agustus', + 'September', + 'Oktober', + 'November', + 'Desember' + ]; + return '${months[date.month]} ${date.year}'; } @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: const Color(0xFFF8F9FA), + backgroundColor: const Color(0xFFF5F6FA), body: _isLoading ? const Center( child: CircularProgressIndicator(color: Color(0xFF1565C0))) : RefreshIndicator( - onRefresh: _loadUser, + onRefresh: _loadAll, color: const Color(0xFF1565C0), - child: CustomScrollView( - physics: const AlwaysScrollableScrollPhysics(), - slivers: [ - // --- Profile Header --- - SliverToBoxAdapter( - child: Container( - decoration: const BoxDecoration( - gradient: LinearGradient( - colors: [Color(0xFF0D47A1), Color(0xFF1976D2)], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(32), - bottomRight: Radius.circular(32), - ), - ), - child: SafeArea( - bottom: false, - child: Padding( - padding: const EdgeInsets.fromLTRB(24, 20, 24, 32), - child: Column( - children: [ - // Title - const Row( - children: [ - Text( - 'Profil Saya', - style: TextStyle( - fontSize: 22, - fontWeight: FontWeight.bold, - color: Colors.white, - ), - ), - ], - ), - const SizedBox(height: 24), - // Avatar & Info - Row( - children: [ - Container( - padding: const EdgeInsets.all(3), - decoration: BoxDecoration( - shape: BoxShape.circle, - border: Border.all( - color: Colors.white, width: 2.5), - ), - child: CircleAvatar( - radius: 38, - backgroundColor: - Colors.white.withOpacity(0.95), - child: Text( - _currentUser?.name - .substring(0, 1) - .toUpperCase() ?? - 'U', - style: const TextStyle( - fontSize: 30, - fontWeight: FontWeight.bold, - color: Color(0xFF0D47A1), - ), - ), - ), - ), - const SizedBox(width: 16), - Expanded( - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - _currentUser?.name ?? 'User', - style: const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - color: Colors.white, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - const SizedBox(height: 4), - Row( - children: [ - Icon(Icons.email_outlined, - size: 14, - color: Colors.white - .withOpacity(0.8)), - const SizedBox(width: 6), - Expanded( - child: Text( - _currentUser?.email ?? '', - style: TextStyle( - fontSize: 13, - color: Colors.white - .withOpacity(0.85), - ), - maxLines: 1, - overflow: - TextOverflow.ellipsis, - ), - ), - ], - ), - if (_currentUser?.phone != null && - _currentUser!.phone!.isNotEmpty) ...[ - const SizedBox(height: 2), - Row( - children: [ - Icon(Icons.phone_outlined, - size: 14, - color: Colors.white - .withOpacity(0.8)), - const SizedBox(width: 6), - Text( - _currentUser!.phone!, - style: TextStyle( - fontSize: 13, - color: Colors.white - .withOpacity(0.85), - ), - ), - ], - ), - ], - ], - ), - ), - ], - ), - ], - ), - ), + child: FadeTransition( + opacity: _fadeAnim, + child: CustomScrollView( + physics: const AlwaysScrollableScrollPhysics(), + slivers: [ + // ==================== HEADER ==================== + SliverToBoxAdapter(child: _buildHeader()), + + // ==================== STATS ==================== + SliverToBoxAdapter( + child: Transform.translate( + offset: const Offset(0, -30), + child: _buildStatsRow(), ), ), - ), - // --- Menu Sections --- - SliverPadding( - padding: const EdgeInsets.fromLTRB(16, 24, 16, 16), - sliver: SliverList( - delegate: SliverChildListDelegate([ - // Akun section - _sectionLabel('Akun'), - const SizedBox(height: 8), - _menuCard([ - _menuTile( - icon: Icons.person_outline, - title: 'Edit Profil', - subtitle: 'Ubah nama, email, dan no. HP', - onTap: () async { - if (_currentUser == null) return; - final result = await Navigator.push( - context, - MaterialPageRoute( - builder: (_) => - EditProfileScreen(user: _currentUser!), - ), - ); - if (result == true) _loadUser(); - }, - ), - _divider(), - _menuTile( - icon: Icons.lock_outline, - title: 'Ubah Password', - subtitle: 'Ganti password akun Anda', - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (_) => - const ChangePasswordScreen(), - ), - ); - }, - ), - ]), - - const SizedBox(height: 20), - - // Aktivitas section - _sectionLabel('Aktivitas'), - const SizedBox(height: 8), - _menuCard([ - _menuTile( - icon: Icons.receipt_long_outlined, - title: 'Booking Saya', - subtitle: 'Lihat riwayat booking Anda', - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (_) => - const BookingHistoryScreen(), - ), - ); - }, - ), - ]), - - const SizedBox(height: 20), - - // Informasi section - _sectionLabel('Informasi'), - const SizedBox(height: 8), - _menuCard([ - _menuTile( - icon: Icons.info_outline, - title: 'Tentang Aplikasi', - subtitle: 'SPK Kontrakan v1.0.0', - onTap: _showAboutDialog, - ), - ]), - - const SizedBox(height: 28), - - // Logout - SizedBox( - width: double.infinity, - height: 52, - child: OutlinedButton.icon( - onPressed: _handleLogout, - icon: const Icon(Icons.logout, size: 20), - label: const Text( - 'Keluar dari Akun', - style: TextStyle( - fontSize: 15, fontWeight: FontWeight.w600), + // ==================== MENU SECTIONS ==================== + SliverPadding( + padding: const EdgeInsets.fromLTRB(20, 0, 20, 20), + sliver: SliverList( + delegate: SliverChildListDelegate([ + // --- Akun --- + _buildSectionTitle('Akun', Icons.person_rounded), + const SizedBox(height: 10), + _buildMenuCard([ + _buildMenuItem( + icon: Icons.edit_rounded, + iconColor: const Color(0xFF1565C0), + iconBg: const Color(0xFF1565C0), + title: 'Edit Profil', + subtitle: 'Ubah nama, email, dan no. HP', + onTap: () async { + if (_currentUser == null) return; + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (_) => EditProfileScreen( + user: _currentUser!), + ), + ); + if (result == true) _loadAll(); + }, ), - style: OutlinedButton.styleFrom( - foregroundColor: Colors.red.shade600, - side: BorderSide(color: Colors.red.shade300), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(14), - ), + _buildMenuItem( + icon: Icons.lock_rounded, + iconColor: const Color(0xFF6A1B9A), + iconBg: const Color(0xFF6A1B9A), + title: 'Ubah Password', + subtitle: 'Ganti password akun Anda', + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => + const ChangePasswordScreen(), + ), + ); + }, ), - ), - ), + ]), - const SizedBox(height: 32), - ]), + const SizedBox(height: 24), + + // --- Aktivitas --- + _buildSectionTitle( + 'Aktivitas', Icons.timeline_rounded), + const SizedBox(height: 10), + _buildMenuCard([ + _buildMenuItem( + icon: Icons.receipt_long_rounded, + iconColor: const Color(0xFF00897B), + iconBg: const Color(0xFF00897B), + title: 'Booking Saya', + subtitle: '$_totalBookings booking tercatat', + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => + const BookingHistoryScreen(), + ), + ); + }, + ), + _buildMenuItem( + icon: Icons.favorite_rounded, + iconColor: const Color(0xFFE53935), + iconBg: const Color(0xFFE53935), + title: 'Favorit Saya', + subtitle: '$_totalFavorites item difavoritkan', + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => const FavoritesScreen(), + ), + ); + }, + ), + ]), + + const SizedBox(height: 24), + + // --- Lainnya --- + _buildSectionTitle( + 'Lainnya', Icons.more_horiz_rounded), + const SizedBox(height: 10), + _buildMenuCard([ + _buildMenuItem( + icon: Icons.info_rounded, + iconColor: const Color(0xFFF57C00), + iconBg: const Color(0xFFF57C00), + title: 'Tentang Aplikasi', + subtitle: 'Informasi & versi aplikasi', + onTap: _showAboutDialog, + ), + ]), + + const SizedBox(height: 32), + + // --- Logout --- + _buildLogoutButton(), + + const SizedBox(height: 40), + ]), + ), ), - ), - ], + ], + ), ), ), ); } - // --- Helper Widgets --- + // ==================== HEADER ==================== + Widget _buildHeader() { + return Container( + decoration: const BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF0D47A1), Color(0xFF1976D2), Color(0xFF42A5F5)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(36), + bottomRight: Radius.circular(36), + ), + ), + child: Stack( + children: [ + // Decorative circles + Positioned( + top: -40, + right: -30, + child: Container( + width: 150, + height: 150, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white.withValues(alpha: 0.06), + ), + ), + ), + Positioned( + bottom: 20, + left: -20, + child: Container( + width: 100, + height: 100, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white.withValues(alpha: 0.04), + ), + ), + ), + Positioned( + top: 30, + left: 50, + child: Container( + width: 60, + height: 60, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.white.withValues(alpha: 0.03), + ), + ), + ), - Widget _sectionLabel(String text) { + // Content + SafeArea( + bottom: false, + child: Padding( + padding: const EdgeInsets.fromLTRB(24, 16, 24, 56), + child: Column( + children: [ + // Title bar + const Row( + children: [ + Icon(Icons.person_rounded, + color: Colors.white, size: 24), + SizedBox(width: 10), + Text( + 'Profil Saya', + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w800, + color: Colors.white, + letterSpacing: 0.3, + ), + ), + ], + ), + + const SizedBox(height: 28), + + // Avatar + Info + Row( + children: [ + // Avatar with shadow and gradient ring + Container( + decoration: BoxDecoration( + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.2), + blurRadius: 16, + offset: const Offset(0, 6), + ), + ], + ), + child: Container( + padding: const EdgeInsets.all(3), + decoration: const BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [ + Colors.white, + Color(0xFFBBDEFB), + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + ), + child: CircleAvatar( + radius: 40, + backgroundColor: const Color(0xFF0D47A1), + child: Text( + _getInitials(_currentUser?.name ?? ''), + style: const TextStyle( + fontSize: 28, + fontWeight: FontWeight.w800, + color: Colors.white, + letterSpacing: 1, + ), + ), + ), + ), + ), + const SizedBox(width: 18), + + // Name, email, phone, member since + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + _currentUser?.name ?? 'User', + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w800, + color: Colors.white, + letterSpacing: 0.2, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 6), + _headerInfoRow( + Icons.email_outlined, + _currentUser?.email ?? '-', + ), + if (_currentUser?.phone != null && + _currentUser!.phone!.isNotEmpty) ...[ + const SizedBox(height: 4), + _headerInfoRow( + Icons.phone_outlined, + _currentUser!.phone!, + ), + ], + const SizedBox(height: 8), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 4), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.15), + borderRadius: BorderRadius.circular(20), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.calendar_month_rounded, + size: 13, + color: Colors.white + .withValues(alpha: 0.85)), + const SizedBox(width: 5), + Text( + 'Bergabung ${_getMemberSince(_currentUser?.createdAt)}', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: Colors.white + .withValues(alpha: 0.9), + ), + ), + ], + ), + ), + ], + ), + ), + ], + ), + ], + ), + ), + ), + ], + ), + ); + } + + Widget _headerInfoRow(IconData icon, String text) { + return Row( + children: [ + Icon(icon, + size: 14, color: Colors.white.withValues(alpha: 0.75)), + const SizedBox(width: 6), + Expanded( + child: Text( + text, + style: TextStyle( + fontSize: 13, + color: Colors.white.withValues(alpha: 0.85), + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ); + } + + // ==================== STATS ROW ==================== + Widget _buildStatsRow() { return Padding( - padding: const EdgeInsets.only(left: 4), - child: Text( - text.toUpperCase(), - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w700, - color: Colors.grey.shade500, - letterSpacing: 1.2, + padding: const EdgeInsets.symmetric(horizontal: 24), + child: Container( + padding: const EdgeInsets.symmetric(vertical: 18, horizontal: 8), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: const Color(0xFF1565C0).withValues(alpha: 0.10), + blurRadius: 20, + offset: const Offset(0, 8), + ), + ], + ), + child: Row( + children: [ + _buildStatItem( + icon: Icons.favorite_rounded, + color: const Color(0xFFE53935), + value: '$_totalFavorites', + label: 'Favorit', + ), + _buildStatDivider(), + _buildStatItem( + icon: Icons.receipt_long_rounded, + color: const Color(0xFF00897B), + value: '$_totalBookings', + label: 'Booking', + ), + _buildStatDivider(), + _buildStatItem( + icon: Icons.verified_user_rounded, + color: const Color(0xFF1565C0), + value: _currentUser?.role == 'admin' ? 'Admin' : 'User', + label: 'Status', + ), + ], ), ), ); } - Widget _menuCard(List children) { - return Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.04), - blurRadius: 10, - offset: const Offset(0, 2), + Widget _buildStatItem({ + required IconData icon, + required Color color, + required String value, + required String label, + }) { + return Expanded( + child: Column( + children: [ + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: color.withValues(alpha: 0.1), + shape: BoxShape.circle, + ), + child: Icon(icon, color: color, size: 22), + ), + const SizedBox(height: 8), + Text( + value, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w800, + color: Color(0xFF1A1A2E), + ), + ), + const SizedBox(height: 2), + Text( + label, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + fontWeight: FontWeight.w500, + ), ), ], ), - child: ClipRRect( - borderRadius: BorderRadius.circular(16), - child: Column(children: children), - ), ); } - Widget _menuTile({ + Widget _buildStatDivider() { + return Container( + width: 1, + height: 45, + color: Colors.grey.shade200, + ); + } + + // ==================== SECTION TITLE ==================== + Widget _buildSectionTitle(String text, IconData icon) { + return Row( + children: [ + Icon(icon, size: 18, color: Colors.grey.shade600), + const SizedBox(width: 8), + Text( + text.toUpperCase(), + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w800, + color: Colors.grey.shade600, + letterSpacing: 1.3, + ), + ), + ], + ); + } + + // ==================== MENU CARD ==================== + Widget _buildMenuCard(List items) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(18), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.04), + blurRadius: 12, + offset: const Offset(0, 3), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(18), + child: Column( + children: List.generate(items.length * 2 - 1, (index) { + if (index.isOdd) { + return Divider( + height: 1, + thickness: 0.5, + indent: 72, + color: Colors.grey.shade100, + ); + } + return items[index ~/ 2]; + }), + ), + ), + ); + } + + Widget _buildMenuItem({ required IconData icon, + required Color iconColor, + required Color iconBg, required String title, required String subtitle, required VoidCallback onTap, @@ -339,17 +631,24 @@ class _ProfileScreenState extends State { child: InkWell( onTap: onTap, child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 15), child: Row( children: [ Container( - width: 42, - height: 42, + width: 44, + height: 44, decoration: BoxDecoration( - color: const Color(0xFF1565C0).withOpacity(0.08), - borderRadius: BorderRadius.circular(12), + gradient: LinearGradient( + colors: [ + iconBg.withValues(alpha: 0.15), + iconBg.withValues(alpha: 0.08), + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.circular(13), ), - child: Icon(icon, color: const Color(0xFF1565C0), size: 22), + child: Icon(icon, color: iconColor, size: 22), ), const SizedBox(width: 14), Expanded( @@ -360,22 +659,31 @@ class _ProfileScreenState extends State { title, style: const TextStyle( fontSize: 15, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, color: Color(0xFF1A1A2E), ), ), - const SizedBox(height: 2), + const SizedBox(height: 3), Text( subtitle, style: TextStyle( fontSize: 12, color: Colors.grey.shade500, + fontWeight: FontWeight.w500, ), ), ], ), ), - Icon(Icons.chevron_right, color: Colors.grey.shade400, size: 22), + Container( + padding: const EdgeInsets.all(6), + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + ), + child: Icon(Icons.chevron_right_rounded, + color: Colors.grey.shade400, size: 20), + ), ], ), ), @@ -383,80 +691,179 @@ class _ProfileScreenState extends State { ); } - Widget _divider() { - return Divider( - height: 1, thickness: 0.5, indent: 72, color: Colors.grey.shade200); + // ==================== LOGOUT ==================== + Widget _buildLogoutButton() { + return Container( + width: double.infinity, + height: 54, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16), + border: Border.all(color: Colors.red.shade200, width: 1.5), + ), + child: Material( + color: Colors.red.shade50.withValues(alpha: 0.5), + borderRadius: BorderRadius.circular(16), + child: InkWell( + onTap: _handleLogout, + borderRadius: BorderRadius.circular(16), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.logout_rounded, + color: Colors.red.shade600, size: 20), + const SizedBox(width: 10), + Text( + 'Keluar dari Akun', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w700, + color: Colors.red.shade600, + ), + ), + ], + ), + ), + ), + ); } - // --- Dialogs --- - + // ==================== DIALOGS ==================== void _showAboutDialog() { showDialog( context: context, builder: (context) => AlertDialog( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), - contentPadding: const EdgeInsets.fromLTRB(24, 24, 24, 16), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), + contentPadding: const EdgeInsets.fromLTRB(28, 28, 28, 16), content: Column( mainAxisSize: MainAxisSize.min, children: [ + // App icon + Container( + padding: const EdgeInsets.all(20), + decoration: BoxDecoration( + gradient: const LinearGradient( + colors: [Color(0xFF0D47A1), Color(0xFF42A5F5)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: + const Color(0xFF1565C0).withValues(alpha: 0.3), + blurRadius: 12, + offset: const Offset(0, 4), + ), + ], + ), + child: const Icon(Icons.home_work_rounded, + color: Colors.white, size: 40), + ), + const SizedBox(height: 20), + const Text( + 'SPK Kontrakan & Laundry', + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: Color(0xFF1A1A2E), + ), + textAlign: TextAlign.center, + ), + const SizedBox(height: 6), + Container( + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 4), + decoration: BoxDecoration( + color: const Color(0xFF1565C0).withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(20), + ), + child: const Text( + 'Versi 2.5.0', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: Color(0xFF1565C0), + ), + ), + ), + const SizedBox(height: 18), + Text( + 'Sistem Pendukung Keputusan untuk membantu mahasiswa Polije menemukan kontrakan dan laundry terbaik menggunakan metode SAW (Simple Additive Weighting).', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, + color: Colors.grey.shade600, + height: 1.6, + ), + ), + const SizedBox(height: 20), Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( - color: const Color(0xFF1565C0).withOpacity(0.08), - borderRadius: BorderRadius.circular(16), + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(14), + ), + child: Column( + children: [ + _aboutDetailRow( + Icons.code_rounded, 'Developer', 'Tim TA'), + const SizedBox(height: 10), + _aboutDetailRow( + Icons.school_rounded, 'Institusi', 'Polije'), + const SizedBox(height: 10), + _aboutDetailRow( + Icons.calendar_today_rounded, 'Tahun', '2025'), + ], ), - child: const Icon(Icons.home_work, - color: Color(0xFF1565C0), size: 40), ), - const SizedBox(height: 16), - const Text( - 'SPK Kontrakan', - style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 4), - Text( - 'Versi 1.0.0', - style: TextStyle(fontSize: 13, color: Colors.grey.shade500), - ), - const SizedBox(height: 16), - Text( - 'Sistem Pendukung Keputusan untuk membantu mahasiswa menemukan kontrakan terbaik menggunakan metode SAW.', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14, color: Colors.grey.shade600, height: 1.5), - ), - const SizedBox(height: 16), - const Divider(), - const SizedBox(height: 8), - _aboutRow('Developer', 'SPK Team'), - _aboutRow('Tahun', '2026'), ], ), actions: [ - TextButton( - onPressed: () => Navigator.pop(context), - child: const Text('Tutup'), + SizedBox( + width: double.infinity, + child: TextButton( + onPressed: () => Navigator.pop(context), + style: TextButton.styleFrom( + foregroundColor: const Color(0xFF1565C0), + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: const Text( + 'Tutup', + style: TextStyle(fontWeight: FontWeight.w700), + ), + ), ), ], ), ); } - Widget _aboutRow(String label, String value) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 3), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(label, - style: TextStyle(fontSize: 13, color: Colors.grey.shade600)), - Text(value, - style: const TextStyle( - fontSize: 13, - fontWeight: FontWeight.w600, - color: Colors.black87)), - ], - ), + Widget _aboutDetailRow(IconData icon, String label, String value) { + return Row( + children: [ + Icon(icon, size: 16, color: const Color(0xFF1565C0)), + const SizedBox(width: 10), + Text( + label, + style: TextStyle( + fontSize: 13, + color: Colors.grey.shade600, + fontWeight: FontWeight.w500, + ), + ), + const Spacer(), + Text( + value, + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w700, + color: Color(0xFF1A1A2E), + ), + ), + ], ); } @@ -464,30 +871,77 @@ class _ProfileScreenState extends State { final confirm = await showDialog( context: context, builder: (context) => AlertDialog( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), - title: Row( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)), + contentPadding: const EdgeInsets.fromLTRB(28, 28, 28, 12), + content: Column( + mainAxisSize: MainAxisSize.min, children: [ - Icon(Icons.logout, color: Colors.red.shade600, size: 24), - const SizedBox(width: 10), - const Text('Keluar', style: TextStyle(fontSize: 18)), + Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.red.shade50, + shape: BoxShape.circle, + ), + child: Icon(Icons.logout_rounded, + color: Colors.red.shade600, size: 32), + ), + const SizedBox(height: 20), + const Text( + 'Keluar dari Akun?', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w800, + color: Color(0xFF1A1A2E), + ), + ), + const SizedBox(height: 10), + Text( + 'Anda harus login kembali untuk mengakses fitur aplikasi', + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, + color: Colors.grey.shade600, + height: 1.5, + ), + ), ], ), - content: const Text('Apakah Anda yakin ingin keluar dari akun?'), actions: [ - TextButton( - onPressed: () => Navigator.pop(context, false), - child: - Text('Batal', style: TextStyle(color: Colors.grey.shade600)), - ), - ElevatedButton( - onPressed: () => Navigator.pop(context, true), - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red.shade600, - foregroundColor: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10)), - ), - child: const Text('Keluar'), + Row( + children: [ + Expanded( + child: OutlinedButton( + onPressed: () => Navigator.pop(context, false), + style: OutlinedButton.styleFrom( + foregroundColor: Colors.grey.shade700, + side: BorderSide(color: Colors.grey.shade300), + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: const Text('Batal', + style: TextStyle(fontWeight: FontWeight.w600)), + ), + ), + const SizedBox(width: 12), + Expanded( + child: ElevatedButton( + onPressed: () => Navigator.pop(context, true), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.red.shade600, + foregroundColor: Colors.white, + elevation: 0, + padding: const EdgeInsets.symmetric(vertical: 12), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + child: const Text('Keluar', + style: TextStyle(fontWeight: FontWeight.w700)), + ), + ), + ], ), ], ), diff --git a/spk_mobile/lib/screens/recommendation_screen.dart b/spk_mobile/lib/screens/recommendation_screen.dart index 7e8b6a9..b715536 100644 --- a/spk_mobile/lib/screens/recommendation_screen.dart +++ b/spk_mobile/lib/screens/recommendation_screen.dart @@ -3,10 +3,11 @@ import 'package:http/http.dart' as http; import 'dart:async'; import 'dart:convert'; import 'package:geolocator/geolocator.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import '../config/app_config.dart'; import '../models/kontrakan.dart'; import '../models/laundry.dart'; +import '../models/user.dart'; +import '../services/auth_service.dart'; import '../widgets/kontrakan_card.dart'; import '../widgets/laundry_card.dart'; @@ -28,6 +29,10 @@ class _RecommendationScreenState extends State { bool _noData = false; // true = memang tidak ada data, false = filter terlalu ketat + // User info + final _authService = AuthService(); + User? _currentUser; + // Bobot values (percentage, total must = 100) // Default: profil mahasiswa int _bobotHarga = 50; @@ -38,8 +43,7 @@ class _RecommendationScreenState extends State { // Jenis layanan selection for laundry String _selectedJenisLayanan = 'reguler'; - // Location values - String _referensiJarak = 'kampus'; + // Location values untuk referensi jarak (deteksi lokasi user) double? _userLatitude; double? _userLongitude; bool _isDetectingLocation = false; @@ -48,12 +52,6 @@ class _RecommendationScreenState extends State { widget.category == 'kontrakan' ? 'Jumlah Kamar' : 'Kecepatan Layanan'; String get _kriteria4Label => widget.category == 'kontrakan' ? 'Fasilitas' : 'Variasi Layanan'; - // ignore: unused_element - String get _kriteria3Key => - widget.category == 'kontrakan' ? 'jumlah_kamar' : 'kecepatan'; - // ignore: unused_element - String get _kriteria4Key => - widget.category == 'kontrakan' ? 'fasilitas' : 'layanan'; int get _totalBobot => _bobotHarga + _bobotJarak + _bobotKriteria3 + _bobotKriteria4; @@ -70,6 +68,33 @@ class _RecommendationScreenState extends State { _bobotJarak = 20; _bobotKriteria3 = 15; _bobotKriteria4 = 15; + + // Load user info + _loadUser(); + + // Auto-detect lokasi untuk laundry + if (widget.category == 'laundry') { + WidgetsBinding.instance.addPostFrameCallback((_) { + _detectUserLocation(); + }); + } + } + + Future _loadUser() async { + try { + // Use cached user first (no API call needed) + if (_authService.currentUser != null) { + if (!mounted) return; + setState(() => _currentUser = _authService.currentUser); + return; + } + // Fallback: load from SharedPreferences via API + await _authService.loadToken(); + if (!mounted) return; + setState(() => _currentUser = _authService.currentUser); + } catch (e) { + debugPrint('Load user error: $e'); + } } /// Auto-balance: when one bobot changes, redistribute the remaining @@ -123,17 +148,15 @@ class _RecommendationScreenState extends State { bobots[otherIdx[i]] = newOther[i]; } - // Final safety check: if sum != 100 due to clamping, adjust the largest + // Final safety: force total == 100 by adjusting the largest other bobot + // without snapping to 5 (exact correction takes priority over pretty numbers) int total = bobots.reduce((a, b) => a + b); if (total != 100) { int diff = 100 - total; int adjustIdx = otherIdx.reduce( (a, b) => bobots[a] >= bobots[b] ? a : b, ); - int adjusted = (bobots[adjustIdx] + diff).clamp(10, 70); - // Snap to nearest multiple of 5 - adjusted = ((adjusted / 5).round() * 5).clamp(10, 70); - bobots[adjustIdx] = adjusted; + bobots[adjustIdx] = (bobots[adjustIdx] + diff).clamp(5, 75); } _bobotHarga = bobots[0]; @@ -168,17 +191,31 @@ class _RecommendationScreenState extends State { return; } + // Validate location for laundry + if (widget.category == 'laundry' && _userLatitude == null) { + // Auto-detect location first, then re-calculate + await _detectUserLocation(); + if (!mounted) return; + // If still no location after detection attempt, warn and stop + if (_userLatitude == null || _userLongitude == null) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text( + 'Lokasi belum terdeteksi. Aktifkan GPS dan coba lagi.', + ), + backgroundColor: Colors.orange, + ), + ); + return; + } + } + setState(() { _isLoading = true; _errorMessage = null; _noData = false; }); - // Clear image cache agar foto terbaru selalu dimuat - await DefaultCacheManager().emptyCache(); - PaintingBinding.instance.imageCache.clear(); - PaintingBinding.instance.imageCache.clearLiveImages(); - final endpoint = widget.category == 'kontrakan' ? '/saw/calculate/kontrakan' : '/saw/calculate/laundry'; @@ -197,11 +234,11 @@ class _RecommendationScreenState extends State { bodyParams['jenis_layanan'] = _selectedJenisLayanan; } - if (widget.category == 'laundry' && _referensiJarak == 'user') { - if (_userLatitude != null && _userLongitude != null) { - bodyParams['user_lat'] = _userLatitude; - bodyParams['user_lng'] = _userLongitude; - } + if (widget.category == 'laundry' && + _userLatitude != null && + _userLongitude != null) { + bodyParams['user_lat'] = _userLatitude; + bodyParams['user_lng'] = _userLongitude; } final response = await http @@ -215,6 +252,8 @@ class _RecommendationScreenState extends State { ) .timeout(const Duration(seconds: 15)); + if (!mounted) return; + if (response.statusCode == 200) { final data = json.decode(response.body); if (data['success'] == true) { @@ -245,35 +284,37 @@ class _RecommendationScreenState extends State { } catch (e) { debugPrint('SAW API Error: $e'); debugPrint('URL: ${AppConfig.baseUrl}$endpoint'); + if (!mounted) return; setState(() { _errorMessage = 'Tidak dapat terhubung ke server (${AppConfig.baseUrl}). Periksa koneksi internet Anda dan coba lagi.\n\nDetail: $e'; _hasCalculated = true; }); } finally { - setState(() { - _isLoading = false; - }); + if (mounted) { + setState(() { + _isLoading = false; + }); + } } } Future _detectUserLocation() async { + // Guard: prevent re-entrant / duplicate calls + if (_isDetectingLocation) return; + setState(() => _isDetectingLocation = true); try { bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); if (!serviceEnabled) { - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Aktifkan GPS Anda terlebih dahulu'), - backgroundColor: Colors.red, - ), - ); - } - setState(() { - _referensiJarak = 'kampus'; - _isDetectingLocation = false; - }); + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Aktifkan GPS Anda terlebih dahulu'), + backgroundColor: Colors.red, + ), + ); + setState(() => _isDetectingLocation = false); return; } @@ -281,71 +322,62 @@ class _RecommendationScreenState extends State { if (permission == LocationPermission.denied) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Izin lokasi ditolak'), - backgroundColor: Colors.red, - ), - ); - } - setState(() { - _referensiJarak = 'kampus'; - _isDetectingLocation = false; - }); + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Izin lokasi ditolak'), + backgroundColor: Colors.red, + ), + ); + setState(() => _isDetectingLocation = false); return; } } if (permission == LocationPermission.deniedForever) { - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text( - 'Izin lokasi ditolak permanen. Ubah di pengaturan.', - ), - backgroundColor: Colors.red, + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text( + 'Izin lokasi ditolak permanen. Ubah di pengaturan.', ), - ); - } - setState(() { - _referensiJarak = 'kampus'; - _isDetectingLocation = false; - }); + backgroundColor: Colors.red, + ), + ); + setState(() => _isDetectingLocation = false); return; } Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, + ).timeout( + const Duration(seconds: 15), + onTimeout: () => throw TimeoutException('Deteksi lokasi timeout'), ); + + if (!mounted) return; setState(() { _userLatitude = position.latitude; _userLongitude = position.longitude; _isDetectingLocation = false; }); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Lokasi berhasil dideteksi!'), - backgroundColor: Colors.green, - duration: Duration(seconds: 2), - ), - ); - } + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Lokasi berhasil dideteksi!'), + backgroundColor: Colors.green, + duration: Duration(seconds: 2), + ), + ); } catch (e) { - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('Gagal mendeteksi lokasi: $e'), - backgroundColor: Colors.red, - ), - ); - } - setState(() { - _referensiJarak = 'kampus'; - _isDetectingLocation = false; - }); + if (!mounted) return; + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Gagal mendeteksi lokasi: ${e.toString().replaceAll('Exception: ', '')}'), + backgroundColor: Colors.red, + ), + ); + setState(() => _isDetectingLocation = false); } } @@ -390,6 +422,8 @@ class _RecommendationScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + _buildUserInfoCard(), + const SizedBox(height: 16), _buildMethodInfoCard(), const SizedBox(height: 16), if (widget.category == 'laundry') ...[ @@ -409,12 +443,151 @@ class _RecommendationScreenState extends State { ); } + Widget _buildUserInfoCard() { + final name = _currentUser?.name ?? ''; + final email = _currentUser?.email ?? ''; + final initials = name.isEmpty + ? 'U' + : name.trim().split(' ').length >= 2 + ? '${name.trim().split(' ')[0][0]}${name.trim().split(' ')[1][0]}'.toUpperCase() + : name.trim()[0].toUpperCase(); + + final hour = DateTime.now().hour; + final greeting = hour < 11 + ? 'Selamat Pagi' + : hour < 15 + ? 'Selamat Siang' + : hour < 18 + ? 'Selamat Sore' + : 'Selamat Malam'; + + final categoryLabel = widget.category == 'kontrakan' ? 'kontrakan' : 'laundry'; + + return Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.04), + blurRadius: 10, + offset: const Offset(0, 3), + ), + ], + ), + child: Row( + children: [ + // Avatar + Container( + width: 52, + height: 52, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [_categoryColor, _categoryColor.withValues(alpha: 0.7)], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + color: _categoryColor.withValues(alpha: 0.3), + blurRadius: 8, + offset: const Offset(0, 3), + ), + ], + ), + child: Center( + child: Text( + initials, + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.w800, + color: Colors.white, + ), + ), + ), + ), + const SizedBox(width: 14), + // Info + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '$greeting,', + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade500, + fontWeight: FontWeight.w500, + ), + ), + const SizedBox(height: 2), + Text( + name.isEmpty ? 'Pengguna' : name, + style: const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w800, + color: Color(0xFF1A1A2E), + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + if (email.isNotEmpty) ...[ + const SizedBox(height: 2), + Text( + email, + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade400, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], + ], + ), + ), + // Category badge + Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), + decoration: BoxDecoration( + color: _categoryColor.withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(20), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + widget.category == 'kontrakan' + ? Icons.home_work_rounded + : Icons.local_laundry_service_rounded, + size: 14, + color: _categoryColor, + ), + const SizedBox(width: 5), + Text( + categoryLabel, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w700, + color: _categoryColor, + ), + ), + ], + ), + ), + ], + ), + ); + } + Widget _buildMethodInfoCard() { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( gradient: LinearGradient( - colors: [_categoryColor, _categoryColor.withOpacity(0.8)], + colors: [_categoryColor, _categoryColor.withValues(alpha: 0.8)], ), borderRadius: BorderRadius.circular(16), boxShadow: [ @@ -902,158 +1075,114 @@ class _RecommendationScreenState extends State { children: [ Icon(Icons.my_location, color: _categoryColor, size: 20), const SizedBox(width: 8), - Text( - 'Referensi Jarak', - style: TextStyle( - fontSize: 15, - fontWeight: FontWeight.bold, - color: Colors.grey[800], + Expanded( + child: Text( + 'Lokasi Saya', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: Colors.grey[800], + ), ), ), + if (_userLatitude != null && !_isDetectingLocation) + InkWell( + onTap: _detectUserLocation, + borderRadius: BorderRadius.circular(12), + child: Padding( + padding: const EdgeInsets.all(4), + child: Icon( + Icons.refresh, + size: 18, + color: _categoryColor, + ), + ), + ), ], ), const SizedBox(height: 4), Text( - 'Tentukan titik referensi untuk perhitungan jarak', + 'Jarak dihitung dari lokasi Anda saat ini', style: TextStyle(fontSize: 12, color: Colors.grey[500]), ), const SizedBox(height: 12), - Container( - padding: const EdgeInsets.symmetric(horizontal: 12), - decoration: BoxDecoration( - color: Colors.grey[50], - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.grey[200]!), - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - value: _referensiJarak, - isExpanded: true, - icon: Icon(Icons.arrow_drop_down, color: _categoryColor), - items: [ - DropdownMenuItem( - value: 'kampus', - child: Row( - children: [ - Icon(Icons.school, size: 18, color: _categoryColor), - const SizedBox(width: 10), - const Text('Dari Kampus Polije'), - ], - ), + if (_isDetectingLocation) + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.blue[50], + borderRadius: BorderRadius.circular(8), + ), + child: const Row( + children: [ + SizedBox( + width: 16, + height: 16, + child: CircularProgressIndicator(strokeWidth: 2), ), - DropdownMenuItem( - value: 'user', - child: Row( - children: [ - Icon( - Icons.location_on, - size: 18, - color: Colors.green[700], - ), - const SizedBox(width: 10), - const Text('Dari Lokasi Saya'), - ], - ), + SizedBox(width: 10), + Text( + 'Mendeteksi lokasi...', + style: TextStyle(fontSize: 12), ), ], - onChanged: (val) { - setState(() { - _referensiJarak = val!; - }); - if (val == 'user' && _userLatitude == null) - _detectUserLocation(); - }, ), - ), - ), - if (_referensiJarak == 'user') ...[ - const SizedBox(height: 10), - if (_isDetectingLocation) - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.blue[50], - borderRadius: BorderRadius.circular(8), - ), - child: const Row( - children: [ - SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator(strokeWidth: 2), - ), - SizedBox(width: 10), - Text( - 'Mendeteksi lokasi...', - style: TextStyle(fontSize: 12), - ), - ], - ), - ) - else if (_userLatitude != null && _userLongitude != null) - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.green[50], - borderRadius: BorderRadius.circular(8), - border: Border.all(color: Colors.green[200]!), - ), - child: Row( - children: [ - const Icon( - Icons.check_circle, - size: 16, - color: Colors.green, - ), - const SizedBox(width: 8), - Expanded( - child: Text( - 'Lokasi: ${_userLatitude!.toStringAsFixed(6)}, ${_userLongitude!.toStringAsFixed(6)}', - style: TextStyle( - fontSize: 11, - color: Colors.green[700], - ), - ), - ), - InkWell( - onTap: _detectUserLocation, - child: Icon( - Icons.refresh, - size: 16, + ) + else if (_userLatitude != null && _userLongitude != null) + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.green[50], + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.green[200]!), + ), + child: Row( + children: [ + const Icon( + Icons.check_circle, + size: 16, + color: Colors.green, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + 'Lokasi terdeteksi: ${_userLatitude!.toStringAsFixed(6)}, ${_userLongitude!.toStringAsFixed(6)}', + style: TextStyle( + fontSize: 11, color: Colors.green[700], ), ), - ], - ), - ) - else - Container( - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.orange[50], - borderRadius: BorderRadius.circular(8), - ), - child: Row( - children: [ - const Icon(Icons.warning, size: 16, color: Colors.orange), - const SizedBox(width: 8), - const Expanded( - child: Text( - 'Lokasi belum terdeteksi', - style: TextStyle(fontSize: 12), - ), - ), - TextButton( - onPressed: _detectUserLocation, - child: const Text( - 'Deteksi', - style: TextStyle(fontSize: 12), - ), - ), - ], - ), + ), + ], ), - ], + ) + else + Container( + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.orange[50], + borderRadius: BorderRadius.circular(8), + ), + child: Row( + children: [ + const Icon(Icons.warning, size: 16, color: Colors.orange), + const SizedBox(width: 8), + const Expanded( + child: Text( + 'Lokasi belum terdeteksi', + style: TextStyle(fontSize: 12), + ), + ), + TextButton( + onPressed: _detectUserLocation, + child: const Text( + 'Deteksi', + style: TextStyle(fontSize: 12), + ), + ), + ], + ), + ), ], ), ); @@ -1123,7 +1252,6 @@ class _RecommendationScreenState extends State { children: [ _buildBobotSummary(), if (widget.category == 'laundry' && - _referensiJarak == 'user' && _userLatitude != null) Container( width: double.infinity, diff --git a/spk_mobile/lib/screens/search_screen.dart b/spk_mobile/lib/screens/search_screen.dart index afb327c..193a53c 100644 --- a/spk_mobile/lib/screens/search_screen.dart +++ b/spk_mobile/lib/screens/search_screen.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import '../models/kontrakan.dart'; import '../models/laundry.dart'; import '../services/kontrakan_service.dart'; @@ -50,20 +49,22 @@ class _SearchScreenState extends State { Future _loadData() async { setState(() => _isLoading = true); - // Clear image cache agar data terbaru dari server selalu dimuat - await DefaultCacheManager().emptyCache(); - PaintingBinding.instance.imageCache.clear(); - PaintingBinding.instance.imageCache.clearLiveImages(); - final kontrakan = await _kontrakanService.getKontrakan(); - final laundry = await _laundryService.getLaundry(); - setState(() { - _allKontrakan = kontrakan; - _filteredKontrakan = kontrakan; - _allLaundry = laundry; - _filteredLaundry = laundry; - _isLoading = false; - }); - _loadFavoriteIds(); + try { + final kontrakan = await _kontrakanService.getKontrakan(); + final laundry = await _laundryService.getLaundry(); + if (!mounted) return; + setState(() { + _allKontrakan = kontrakan; + _filteredKontrakan = kontrakan; + _allLaundry = laundry; + _filteredLaundry = laundry; + _isLoading = false; + }); + _loadFavoriteIds(); + } catch (e) { + if (!mounted) return; + setState(() => _isLoading = false); + } } Future _loadFavoriteIds() async { @@ -84,38 +85,48 @@ class _SearchScreenState extends State { Future _toggleKontrakanFav(int id) async { final wasFav = _favKontrakanIds.contains(id); setState(() { - if (wasFav) - _favKontrakanIds.remove(id); - else - _favKontrakanIds.add(id); + if (wasFav) _favKontrakanIds.remove(id); else _favKontrakanIds.add(id); }); - final result = await _favoriteService.toggleKontrakanFavorite(id); - if (result['success'] != true && mounted) { - setState(() { - if (wasFav) - _favKontrakanIds.add(id); - else - _favKontrakanIds.remove(id); - }); + try { + final result = await _favoriteService.toggleKontrakanFavorite(id); + if (result['success'] != true && mounted) { + setState(() { + if (wasFav) _favKontrakanIds.add(id); else _favKontrakanIds.remove(id); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(result['message'] ?? 'Gagal'), backgroundColor: Colors.red.shade600), + ); + } + } catch (e) { + if (mounted) { + setState(() { + if (wasFav) _favKontrakanIds.add(id); else _favKontrakanIds.remove(id); + }); + } } } Future _toggleLaundryFav(int id) async { final wasFav = _favLaundryIds.contains(id); setState(() { - if (wasFav) - _favLaundryIds.remove(id); - else - _favLaundryIds.add(id); + if (wasFav) _favLaundryIds.remove(id); else _favLaundryIds.add(id); }); - final result = await _favoriteService.toggleLaundryFavorite(id); - if (result['success'] != true && mounted) { - setState(() { - if (wasFav) - _favLaundryIds.add(id); - else - _favLaundryIds.remove(id); - }); + try { + final result = await _favoriteService.toggleLaundryFavorite(id); + if (result['success'] != true && mounted) { + setState(() { + if (wasFav) _favLaundryIds.add(id); else _favLaundryIds.remove(id); + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(result['message'] ?? 'Gagal'), backgroundColor: Colors.red.shade600), + ); + } + } catch (e) { + if (mounted) { + setState(() { + if (wasFav) _favLaundryIds.add(id); else _favLaundryIds.remove(id); + }); + } } } @@ -194,10 +205,9 @@ class _SearchScreenState extends State { }).toList(); } - // Filter by price + // Filter by price (laundry hargaKiloan is per-kg, no multiplication needed) filtered = filtered.where((l) { - final harga = l.hargaKiloan * 10; // Approximate for 10kg - return harga >= _priceRange.start && harga <= _priceRange.end; + return l.hargaKiloan >= _priceRange.start && l.hargaKiloan <= _priceRange.end; }).toList(); setState(() => _filteredLaundry = filtered); @@ -280,8 +290,10 @@ class _SearchScreenState extends State { children: [ Expanded( child: GestureDetector( - onTap: () => - setState(() => _selectedCategory = 'Kontrakan'), + onTap: () { + setState(() => _selectedCategory = 'Kontrakan'); + _applyFilters(); + }, child: AnimatedContainer( duration: const Duration(milliseconds: 200), padding: const EdgeInsets.symmetric(vertical: 10), @@ -329,8 +341,10 @@ class _SearchScreenState extends State { const SizedBox(width: 4), Expanded( child: GestureDetector( - onTap: () => - setState(() => _selectedCategory = 'Laundry'), + onTap: () { + setState(() => _selectedCategory = 'Laundry'); + _applyLaundryFilters(); + }, child: AnimatedContainer( duration: const Duration(milliseconds: 200), padding: const EdgeInsets.symmetric(vertical: 10), diff --git a/spk_mobile/lib/services/auth_service.dart b/spk_mobile/lib/services/auth_service.dart index 3230369..f6357ea 100644 --- a/spk_mobile/lib/services/auth_service.dart +++ b/spk_mobile/lib/services/auth_service.dart @@ -220,6 +220,9 @@ class AuthService { required String password, required String passwordConfirmation, }) async { + if (_currentUser == null || _token == null) { + return {'success': false, 'message': 'Silakan login ulang'}; + } try { final response = await http.put( Uri.parse('${AppConfig.baseUrl}/profile/update'), @@ -229,8 +232,8 @@ class AuthService { 'Authorization': 'Bearer $_token', }, body: jsonEncode({ - 'name': _currentUser?.name ?? '', - 'email': _currentUser?.email ?? '', + 'name': _currentUser!.name, + 'email': _currentUser!.email, 'password': password, 'password_confirmation': passwordConfirmation, }), diff --git a/spk_mobile/lib/services/favorite_service.dart b/spk_mobile/lib/services/favorite_service.dart index 6713d8d..13f90b8 100644 --- a/spk_mobile/lib/services/favorite_service.dart +++ b/spk_mobile/lib/services/favorite_service.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import '../config/app_config.dart'; import '../models/kontrakan.dart'; @@ -21,54 +22,118 @@ class FavoriteService { return headers; } - // Get all user's favorites with full data + /// Pastikan token ada sebelum request + bool _ensureAuthenticated() { + if (_authService.token == null) { + debugPrint('[FAV] ❌ Token NULL — user belum login!'); + return false; + } + return true; + } + + // Get all user's favorites with full data (raw JSON) Future> getFavorites() async { + if (!_ensureAuthenticated()) { + return {'success': false, 'message': 'Belum login', 'kontrakan': [], 'laundry': []}; + } + try { - final response = await http.get( - Uri.parse('${AppConfig.baseUrl}/favorites'), - headers: _headers, - ); + final url = '${AppConfig.baseUrl}/favorites'; + debugPrint('[FAV] GET $url'); + debugPrint('[FAV] Token: ${_authService.token!.substring(0, 10)}...'); + + final response = await http + .get(Uri.parse(url), headers: _headers) + .timeout(AppConfig.connectionTimeout); + + debugPrint('[FAV] GET Status: ${response.statusCode}'); + debugPrint('[FAV] GET Body: ${response.body.length > 300 ? response.body.substring(0, 300) : response.body}'); + + if (response.statusCode == 401) { + debugPrint('[FAV] ❌ 401 Unauthorized — token expired/invalid'); + return {'success': false, 'message': 'Sesi expired, silakan login ulang', 'kontrakan': [], 'laundry': []}; + } final data = jsonDecode(response.body); if (response.statusCode == 200 && data['success'] == true) { return { 'success': true, - 'kontrakan': data['data']['kontrakan'] ?? [], - 'laundry': data['data']['laundry'] ?? [], + 'kontrakan': data['data']?['kontrakan'] ?? [], + 'laundry': data['data']?['laundry'] ?? [], }; } else { - return {'success': false, 'kontrakan': [], 'laundry': []}; + debugPrint('[FAV] ❌ Response not success: ${response.statusCode} ${data['message']}'); + return { + 'success': false, + 'message': data['message'] ?? 'Gagal memuat favorit', + 'kontrakan': [], + 'laundry': [], + }; } - } catch (e) { - // Error getting favorites silently - return {'success': false, 'kontrakan': [], 'laundry': []}; + } catch (e, stack) { + debugPrint('[FAV] ❌ Exception in getFavorites: $e'); + debugPrint('[FAV] Stack: $stack'); + return { + 'success': false, + 'message': 'Gagal terhubung ke server: $e', + 'kontrakan': [], + 'laundry': [], + }; } } - // Get favorites with parsed models + // Get favorites with parsed Kontrakan/Laundry models Future> getFavoritesWithModels() async { + final result = await getFavorites(); + + if (result['success'] != true) { + // Return typed empty lists to avoid cast errors downstream + return { + 'success': false, + 'message': result['message'] ?? 'Gagal memuat favorit', + 'kontrakan': [], + 'laundry': [], + }; + } + try { - final result = await getFavorites(); - if (result['success'] != true) return result; + final rawKontrakan = result['kontrakan'] as List? ?? []; + final rawLaundry = result['laundry'] as List? ?? []; - final kontrakanList = (result['kontrakan'] as List) - .map((json) => Kontrakan.fromJson(json as Map)) - .toList(); + debugPrint('[FAV] Parsing ${rawKontrakan.length} kontrakan, ${rawLaundry.length} laundry'); - final laundryList = (result['laundry'] as List) - .map((json) => Laundry.fromJson(json as Map)) - .toList(); + final kontrakanList = []; + for (final json in rawKontrakan) { + try { + kontrakanList.add(Kontrakan.fromJson(json as Map)); + } catch (e) { + debugPrint('[FAV] ⚠ Skip kontrakan parse error: $e — data: $json'); + } + } + + final laundryList = []; + for (final json in rawLaundry) { + try { + laundryList.add(Laundry.fromJson(json as Map)); + } catch (e) { + debugPrint('[FAV] ⚠ Skip laundry parse error: $e — data: $json'); + } + } + + debugPrint('[FAV] ✅ Parsed ${kontrakanList.length} kontrakan, ${laundryList.length} laundry'); return { 'success': true, 'kontrakan': kontrakanList, 'laundry': laundryList, }; - } catch (e) { - // Error parsing favorites silently + } catch (e, stack) { + debugPrint('[FAV] ❌ Exception parsing favorites: $e'); + debugPrint('[FAV] Stack: $stack'); return { 'success': false, + 'message': 'Gagal memproses data favorit', 'kontrakan': [], 'laundry': [], }; @@ -83,80 +148,121 @@ class FavoriteService { return {'kontrakan': [], 'laundry': []}; } - return { - 'kontrakan': (result['kontrakan'] as List) - .map((e) => (e as Map)['id'] as int? ?? 0) - .toList(), - 'laundry': (result['laundry'] as List) - .map((e) => (e as Map)['id'] as int? ?? 0) - .toList(), - }; + final kontrakanIds = []; + for (final e in (result['kontrakan'] as List? ?? [])) { + final id = (e as Map?)?['id']; + if (id != null) kontrakanIds.add(id is int ? id : int.tryParse(id.toString()) ?? 0); + } + + final laundryIds = []; + for (final e in (result['laundry'] as List? ?? [])) { + final id = (e as Map?)?['id']; + if (id != null) laundryIds.add(id is int ? id : int.tryParse(id.toString()) ?? 0); + } + + debugPrint('[FAV] IDs → kontrakan: $kontrakanIds, laundry: $laundryIds'); + return {'kontrakan': kontrakanIds, 'laundry': laundryIds}; } catch (e) { + debugPrint('[FAV] ❌ Exception in getFavoriteIds: $e'); return {'kontrakan': [], 'laundry': []}; } } // Toggle kontrakan favorite status Future> toggleKontrakanFavorite(int kontrakanId) async { + if (!_ensureAuthenticated()) { + return {'success': false, 'message': 'Belum login'}; + } + try { - final response = await http.post( - Uri.parse('${AppConfig.baseUrl}/favorites/kontrakan/$kontrakanId'), - headers: _headers, - ); + final url = '${AppConfig.baseUrl}/favorites/kontrakan/$kontrakanId'; + debugPrint('[FAV] POST $url'); + + final response = await http + .post(Uri.parse(url), headers: _headers) + .timeout(AppConfig.connectionTimeout); + + debugPrint('[FAV] Toggle kontrakan → ${response.statusCode}: ${response.body}'); + + if (response.statusCode == 401) { + return {'success': false, 'message': 'Sesi expired, silakan login ulang'}; + } final data = jsonDecode(response.body); + final statusOk = response.statusCode == 200 || response.statusCode == 201; - if (response.statusCode == 200 && data['success'] == true) { + if (statusOk && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Status favorit berhasil diubah', - 'isFavorite': data['data']['is_favorite'] ?? false, + 'isFavorite': data['is_favorited'] ?? false, }; } else { return { 'success': false, - 'message': data['message'] ?? 'Gagal mengubah status favorit', + 'message': data['message'] ?? 'Gagal mengubah status favorit (${response.statusCode})', }; } } catch (e) { - return {'success': false, 'message': 'Error: $e'}; + debugPrint('[FAV] ❌ Exception toggleKontrakan: $e'); + return {'success': false, 'message': 'Gagal terhubung ke server'}; } } // Toggle laundry favorite status Future> toggleLaundryFavorite(int laundryId) async { + if (!_ensureAuthenticated()) { + return {'success': false, 'message': 'Belum login'}; + } + try { - final response = await http.post( - Uri.parse('${AppConfig.baseUrl}/favorites/laundry/$laundryId'), - headers: _headers, - ); + final url = '${AppConfig.baseUrl}/favorites/laundry/$laundryId'; + debugPrint('[FAV] POST $url'); + + final response = await http + .post(Uri.parse(url), headers: _headers) + .timeout(AppConfig.connectionTimeout); + + debugPrint('[FAV] Toggle laundry → ${response.statusCode}: ${response.body}'); + + if (response.statusCode == 401) { + return {'success': false, 'message': 'Sesi expired, silakan login ulang'}; + } final data = jsonDecode(response.body); + final statusOk = response.statusCode == 200 || response.statusCode == 201; - if (response.statusCode == 200 && data['success'] == true) { + if (statusOk && data['success'] == true) { return { 'success': true, 'message': data['message'] ?? 'Status favorit berhasil diubah', - 'isFavorite': data['data']['is_favorite'] ?? false, + 'isFavorite': data['is_favorited'] ?? false, }; } else { return { 'success': false, - 'message': data['message'] ?? 'Gagal mengubah status favorit', + 'message': data['message'] ?? 'Gagal mengubah status favorit (${response.statusCode})', }; } } catch (e) { - return {'success': false, 'message': 'Error: $e'}; + debugPrint('[FAV] ❌ Exception toggleLaundry: $e'); + return {'success': false, 'message': 'Gagal terhubung ke server'}; } } // Remove favorite Future> removeFavorite(int favoriteId) async { + if (!_ensureAuthenticated()) { + return {'success': false, 'message': 'Belum login'}; + } + try { - final response = await http.delete( - Uri.parse('${AppConfig.baseUrl}/favorites/$favoriteId'), - headers: _headers, - ); + final response = await http + .delete( + Uri.parse('${AppConfig.baseUrl}/favorites/$favoriteId'), + headers: _headers, + ) + .timeout(AppConfig.connectionTimeout); final data = jsonDecode(response.body); @@ -172,18 +278,18 @@ class FavoriteService { }; } } catch (e) { - return {'success': false, 'message': 'Error: $e'}; + debugPrint('[FAV] ❌ Exception removeFavorite: $e'); + return {'success': false, 'message': 'Gagal terhubung ke server'}; } } // Check if kontrakan is favorite Future isKontrakanFavorite(int kontrakanId) async { try { - final favorites = await getFavorites(); - final kontrakanList = favorites['kontrakan'] as List? ?? []; - return kontrakanList.contains(kontrakanId); + final ids = await getFavoriteIds(); + return (ids['kontrakan'] ?? []).contains(kontrakanId); } catch (e) { - // Error checking favorite silently + debugPrint('[FAV] ❌ Exception isKontrakanFavorite: $e'); return false; } } @@ -191,11 +297,10 @@ class FavoriteService { // Check if laundry is favorite Future isLaundryFavorite(int laundryId) async { try { - final favorites = await getFavorites(); - final laundryList = favorites['laundry'] as List? ?? []; - return laundryList.contains(laundryId); + final ids = await getFavoriteIds(); + return (ids['laundry'] ?? []).contains(laundryId); } catch (e) { - // Error checking favorite silently + debugPrint('[FAV] ❌ Exception isLaundryFavorite: $e'); return false; } } diff --git a/spk_mobile/lib/services/kontrakan_service.dart b/spk_mobile/lib/services/kontrakan_service.dart index fefce98..51444d9 100644 --- a/spk_mobile/lib/services/kontrakan_service.dart +++ b/spk_mobile/lib/services/kontrakan_service.dart @@ -30,22 +30,17 @@ class KontrakanService { String status = 'tersedia', }) async { try { - var url = '${AppConfig.baseUrl}/kontrakan?status=$status'; + var uri = Uri.parse('${AppConfig.baseUrl}/kontrakan').replace( + queryParameters: { + 'status': status, + if (search != null && search.isNotEmpty) 'search': search, + if (hargaMin != null) 'harga_min': hargaMin.toString(), + if (hargaMax != null) 'harga_max': hargaMax.toString(), + if (jumlahKamar != null) 'jumlah_kamar': jumlahKamar.toString(), + }, + ); - if (search != null && search.isNotEmpty) { - url += '&search=$search'; - } - if (hargaMin != null) { - url += '&harga_min=$hargaMin'; - } - if (hargaMax != null) { - url += '&harga_max=$hargaMax'; - } - if (jumlahKamar != null) { - url += '&jumlah_kamar=$jumlahKamar'; - } - - final response = await http.get(Uri.parse(url), headers: _headers); + final response = await http.get(uri, headers: _headers); if (response.statusCode == 200) { final data = jsonDecode(response.body); diff --git a/spk_mobile/lib/services/server_discovery_service.dart b/spk_mobile/lib/services/server_discovery_service.dart new file mode 100644 index 0000000..2234afc --- /dev/null +++ b/spk_mobile/lib/services/server_discovery_service.dart @@ -0,0 +1,145 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:http/http.dart' as http; +import 'package:shared_preferences/shared_preferences.dart'; +import '../config/app_config.dart'; + +/// Service untuk mendeteksi IP server Laravel secara otomatis. +/// Urutan pencarian: +/// 1. IP tersimpan di cache (paling cepat jika masih valid) +/// 2. Android Emulator (10.0.2.2) +/// 3. Localhost (desktop / iOS simulator) +/// 4. Scan subnet lokal HP secara paralel +class ServerDiscoveryService { + static const int _port = 8000; + static const String _cacheKey = 'discovered_server_url'; + static const Duration _probeTimeout = Duration(seconds: 2); + + // ─── PUBLIC ENTRY POINT ───────────────────────────────────────────────────── + + /// Temukan server dan update [AppConfig] secara otomatis. + /// Kembalikan `true` jika server ditemukan, `false` jika tidak. + static Future discover({ + void Function(String status)? onStatus, + }) async { + onStatus?.call('Mencari server...'); + + // 1. Coba cache terlebih dahulu + final cached = await _getCachedUrl(); + if (cached != null) { + onStatus?.call('Mencoba koneksi tersimpan...'); + if (await _isAlive(cached)) { + AppConfig.setServerUrl(cached); + return true; + } + } + + // 2. Android Emulator + const emulatorUrl = 'http://10.0.2.2:$_port'; + if (await _isAlive(emulatorUrl)) { + await _saveCache(emulatorUrl); + AppConfig.setServerUrl(emulatorUrl); + return true; + } + + // 3. Localhost (Windows/iOS) + const localhostUrl = 'http://localhost:$_port'; + if (await _isAlive(localhostUrl)) { + await _saveCache(localhostUrl); + AppConfig.setServerUrl(localhostUrl); + return true; + } + + // 4. Scan subnet lokal HP + onStatus?.call('Memindai jaringan lokal...'); + final subnets = await _getLocalSubnets(); + if (subnets.isNotEmpty) { + final found = await _scanSubnets(subnets, onStatus: onStatus); + if (found != null) { + await _saveCache(found); + AppConfig.setServerUrl(found); + return true; + } + } + + // Gagal — tetap pakai nilai AppConfig yang lama (last known) + return false; + } + + // ─── HELPERS ──────────────────────────────────────────────────────────────── + + /// Cek apakah server ada di URL tersebut (respons apapun = server hidup). + static Future _isAlive(String serverUrl) async { + try { + final response = await http + .get( + Uri.parse('$serverUrl/api'), + headers: {'Accept': 'application/json'}, + ) + .timeout(_probeTimeout); + // Respons 4xx/5xx tetap berarti server bisa dijangkau + return response.statusCode > 0; + } catch (_) { + return false; + } + } + + /// Ambil semua subnet IPv4 milik device (e.g., "192.168.1"). + static Future> _getLocalSubnets() async { + final subnets = []; + try { + final interfaces = await NetworkInterface.list( + type: InternetAddressType.IPv4, + includeLinkLocal: false, + ); + for (final iface in interfaces) { + for (final addr in iface.addresses) { + final parts = addr.address.split('.'); + if (parts.length == 4 && parts[0] != '127') { + final subnet = '${parts[0]}.${parts[1]}.${parts[2]}'; + if (!subnets.contains(subnet)) subnets.add(subnet); + } + } + } + } catch (_) {} + return subnets; + } + + /// Scan semua host di subnet secara paralel, kembalikan URL pertama yang aktif. + static Future _scanSubnets( + List subnets, { + void Function(String)? onStatus, + }) async { + final completer = Completer(); + int remaining = subnets.length * 254; + + if (remaining == 0) return null; + + for (final subnet in subnets) { + for (int i = 1; i <= 254; i++) { + final url = 'http://$subnet.$i:$_port'; + _isAlive(url).then((alive) { + if (alive && !completer.isCompleted) { + completer.complete(url); + } + remaining--; + if (remaining <= 0 && !completer.isCompleted) { + completer.complete(null); + } + }); + } + } + + return completer.future; + } + + static Future _getCachedUrl() async { + final prefs = await SharedPreferences.getInstance(); + return prefs.getString(_cacheKey); + } + + static Future _saveCache(String serverUrl) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_cacheKey, serverUrl); + } +}