5.7 KiB
5.7 KiB
Ringkasan Perbaikan Mobile & Backend - SPK Kontrakan/Laundry
Tanggal: 31 Januari 2026
🔧 Perbaikan Web Admin Panel
1. Custom Pagination dengan Previous/Next
- File:
resources/views/vendor/pagination/custom.blade.php - Perubahan: Mengganti tombol panah kiri/kanan dengan tombol "Previous" dan "Next" yang lebih jelas
- Fitur:
- Menampilkan "Showing X to Y of Z results"
- Tombol Previous/Next dengan ikon
- Nomor halaman yang dapat diklik
2. Select All Checkbox Styling
- File:
resources/views/admin/Kontrakan/index.blade.php - File:
resources/views/admin/Laundry/index.blade.php - Perubahan: Enhanced checkbox styling dengan warna yang lebih terlihat
- Hijau saat dipilih
- Kuning saat indeterminate (sebagian dipilih)
- Hover effects
3. Laundry Index Pagination
- File:
resources/views/admin/Laundry/index.blade.php - Perubahan: Menambahkan pagination yang sebelumnya tidak ada
🗃️ Perbaikan Database
1. Kriteria Seeder
- File:
database/seeders/KriteriaSeeder.php(BARU) - Konten: 8 kriteria untuk SAW calculation:
Kriteria Kontrakan:
| Nama Kriteria | Bobot | Tipe | Keterangan |
|---|---|---|---|
| harga | 0.30 | Cost | Harga sewa per tahun |
| jarak | 0.25 | Cost | Jarak ke kampus dalam meter |
| jumlah_kamar | 0.25 | Benefit | Jumlah kamar tersedia |
| fasilitas_count | 0.20 | Benefit | Jumlah fasilitas |
Kriteria Laundry:
| Nama Kriteria | Bobot | Tipe | Keterangan |
|---|---|---|---|
| harga | 0.25 | Cost | Harga per kilogram |
| jarak | 0.25 | Cost | Jarak ke kampus dalam meter |
| kecepatan_layanan | 0.25 | Benefit | Kecepatan layanan laundry |
| layanan | 0.25 | Benefit | Jumlah variasi layanan tersedia |
🔄 Perbaikan SAW Controller
File: app/Http/Controllers/Api/SAWController.php
Masalah Sebelumnya:
- Menggunakan kolom
jenis(tidak ada) → seharusnyatipe_bisnis - Menggunakan kolom
kode(tidak ada) → seharusnyanama_kriteria - Query kontrakan hanya cek status 'tersedia' (database menggunakan 'available')
Perbaikan:
// Field mapping yang benar
Kriteria::where('tipe_bisnis', 'kontrakan') // bukan 'jenis'
$criteria[$k->nama_kriteria] = [...] // bukan 'kode'
// Status handling yang benar
$q->where('status', 'tersedia')->orWhere('status', 'available');
📱 Perbaikan Mobile App
1. API URL Prefix
Masalah: AppConfig.baseUrl sudah mengandung /api, jadi URL menjadi /api/api/saw/...
File yang diperbaiki:
lib/services/kontrakan_service.dartlib/services/laundry_service.dartlib/screens/recommendation_screen.dartlib/screens/improved_home_screen.dart
Perbaikan:
// SEBELUM (SALAH)
Uri.parse('${AppConfig.baseUrl}/api/saw/calculate/kontrakan')
// SESUDAH (BENAR)
Uri.parse('${AppConfig.baseUrl}/saw/calculate/kontrakan')
2. Model Field Mapping
Kontrakan Model (lib/models/kontrakan.dart)
// Handle kedua field name: jarak_kampus dan jarak
jarak: json['jarak_kampus'] != null
? (double.tryParse(json['jarak_kampus'].toString()) ?? 0) / 1000
: (json['jarak'] != null
? (double.tryParse(json['jarak'].toString()) ?? 0) / 1000
: 0.0),
Laundry Model (lib/models/laundry.dart)
- Fixed duplicate
primaryPhotogetter - Added improved field parsing untuk jarak dan harga
3. API Kontrakan Controller
File: app/Http/Controllers/Api/KontrakanController.php
Perbaikan: Handle kedua status value ('tersedia' dan 'available')
if ($status === 'tersedia' || $status === 'available') {
$query->where(function($q) {
$q->where('status', 'tersedia')
->orWhere('status', 'available');
});
}
✅ Status Testing
API SAW Kontrakan
{
"success": true,
"data": {
"kriteria": [...], // 4 kriteria
"hasil": [...] // 18 kontrakan dengan ranking
}
}
- Ranking #1: Kontrakan Mewah Jl. Raya Surabaya (Skor: 0.79)
API SAW Laundry
{
"success": true,
"data": {
"kriteria": [...], // 4 kriteria
"hasil": [...] // 10 laundry dengan ranking
}
}
- Ranking #1: Laundry Cepat Dekat Kampus (Skor: 0.85)
📋 Perintah untuk Testing
Menjalankan Server Laravel
cd c:\laragon\www\TA\spk_kontrakan
php artisan serve --port=8000
Test API SAW
# Kontrakan
Invoke-WebRequest -Uri 'http://127.0.0.1:8000/api/saw/calculate/kontrakan' -Method POST -ContentType 'application/json' -Body '{}' -UseBasicParsing
# Laundry
Invoke-WebRequest -Uri 'http://127.0.0.1:8000/api/saw/calculate/laundry' -Method POST -ContentType 'application/json' -Body '{}' -UseBasicParsing
Seed Kriteria (jika perlu reset)
php artisan db:seed --class=KriteriaSeeder
🎯 Fitur SAW yang Berfungsi
- ✅ Menampilkan kriteria yang digunakan
- ✅ Menghitung normalisasi berdasarkan tipe (Benefit/Cost)
- ✅ Menghitung skor SAW dengan bobot
- ✅ Mengurutkan berdasarkan skor (ranking)
- ✅ Mengembalikan data lengkap dengan ranking
- ✅ Support filter: harga_min, harga_max, jarak_max, jumlah_kamar, fasilitas
📝 Catatan untuk Sidang TA
-
Algoritma SAW sudah berfungsi penuh dengan:
- Normalisasi matrix keputusan
- Pembobotan kriteria
- Perhitungan skor preferensi
- Ranking alternatif
-
Kriteria:
- Cost (semakin kecil semakin baik): harga, jarak, waktu_proses
- Benefit (semakin besar semakin baik): jumlah_kamar, fasilitas_count, rating
-
Konsistensi Data:
- Field
jarakdalam meter di database - Ditampilkan dalam km di mobile (dibagi 1000)
- Status kontrakan: 'available' (bukan 'tersedia')
- Status laundry: 'buka'
- Field