cari); session::flash('kepentingan_lokasi', $request->kepentingan_lokasi); session::flash('kepentingan_harga', $request->kepentingan_harga); session::flash('kepentingan_fasilitas', $request->kepentingan_fasilitas); session::flash('kepentingan_jarak', $request->kepentingan_jarak); session::flash('kepentingan_keamanan', $request->kepentingan_keamanan); session::flash('kepentingan_aksesjalan', $request->kepentingan_aksesjalan); session::flash('jenis_kost', $request->jenis_kost); // jika nilai kepentingan ada yang bernilai 0 maka tidak usah dihitung if ($request->kepentingan_lokasi == 0 || $request->kepentingan_harga == 0 || $request->kepentingan_fasilitas == 0 || $request->kepentingan_jarak == 0 || $request->kepentingan_keamanan == 0 || $request->kepentingan_aksesjalan == 0) { $alternatifterbaik = ''; $cari = $request->cari; if (Auth::check() == null) { $kost = Kost::with([ 'aksesjalan', 'fasilitas', 'keamanan', 'harga', 'jarak', 'lokasi', ])->where('name', 'like', '%' . $cari . '%')->paginate(4); // jika ajax if ($request->ajax()) { $view = view('landing.data.landing', [ 'kost' => $kost, 'alternatifterbaik' => $alternatifterbaik, 'cari' => $cari, ])->render(); return response()->json(['html' => $view]); } return view('landing.pages.landing', [ 'kost' => $kost, 'alternatifterbaik' => $alternatifterbaik, 'cari' => $cari, ]); } else { if (Auth::user()->id_role == 1) { return redirect('/kost'); } else { $kost = Kost::with([ 'aksesjalan', 'fasilitas', 'keamanan', 'harga', 'jarak', 'lokasi', ])->where('name', 'like', '%' . $cari . '%')->paginate(4); // jika ajax if ($request->ajax()) { $view = view('landing.data.landing', [ 'kost' => $kost, 'alternatifterbaik' => $alternatifterbaik, 'cari' => $cari, ])->render(); return response()->json(['html' => $view]); } return view('landing.pages.landing', [ 'kost' => $kost, 'alternatifterbaik' => $alternatifterbaik, 'cari' => $cari, ]); } } } else { $kepentinganlokasi = $request->kepentingan_lokasi; $kepentinganharga = $request->kepentingan_harga; $kepentinganfasilitas = $request->kepentingan_fasilitas; $kepentinganjarak = $request->kepentingan_jarak; $kepentingankeamanan = $request->kepentingan_keamanan; $kepentinganaksesjalan = $request->kepentingan_aksesjalan; $jenis_kost = $request->jenis_kost; $jumlahkepentingan = $kepentinganlokasi + $kepentinganharga + $kepentinganfasilitas + $kepentinganjarak + $kepentingankeamanan + $kepentinganaksesjalan; $nilaibobotlokasi = $kepentinganlokasi / $jumlahkepentingan; $nilaibobotharga = $kepentinganharga / $jumlahkepentingan; $nilaibobotfasilitas = $kepentinganfasilitas / $jumlahkepentingan; $nilaibobotjarak = $kepentinganjarak / $jumlahkepentingan; $nilaibobotkeamanan = $kepentingankeamanan / $jumlahkepentingan; $nilaibobotaksesjalan = $kepentinganaksesjalan / $jumlahkepentingan; if (Kriteria::all()->where('name', 'Lokasi')->first()->jenis == 'Benefit') { $nilaipangkatlokasi = pow($nilaibobotlokasi, 1); } else { $nilaipangkatlokasi = -1 * pow($nilaibobotlokasi, 1); } if (Kriteria::all()->where('name', 'Harga')->first()->jenis == 'Benefit') { $nilaipangkatharga = pow($nilaibobotharga, 1); } else { $nilaipangkatharga = -1 * pow($nilaibobotharga, 1); } if (Kriteria::all()->where('name', 'Fasilitas')->first()->jenis == 'Benefit') { $nilaipangkatfasilitas = pow($nilaibobotfasilitas, 1); } else { $nilaipangkatfasilitas = -1 * pow($nilaibobotfasilitas, 1); } if (Kriteria::all()->where('name', 'Jarak')->first()->jenis == 'Benefit') { $nilaipangkatjarak = pow($nilaibobotjarak, 1); } else { $nilaipangkatjarak = -1 * pow($nilaibobotjarak, 1); } if (Kriteria::all()->where('name', 'Keamanan')->first()->jenis == 'Benefit') { $nilaipangkatkeamanan = pow($nilaibobotkeamanan, 1); } else { $nilaipangkatkeamanan = -1 * pow($nilaibobotkeamanan, 1); } if (Kriteria::all()->where('name', 'Akses Jalan')->first()->jenis == 'Benefit') { $nilaipangkataksesjalan = pow($nilaibobotaksesjalan, 1); } else { $nilaipangkataksesjalan = -1 * pow($nilaibobotaksesjalan, 1); } // penghitungan vektor S // $alternatif = Alternatif::with('kost')->get(); if ($jenis_kost == '0') { $alternatif = Alternatif::with('kost')->get(); } else { // join alternatif dengan tabel kost berdasarkan jenis kost $alternatif = Alternatif::with('kost')->whereHas('kost', function ($query) use ($jenis_kost) { $query->where('jenis_kost', $jenis_kost); })->get(); } if ($alternatif->count() == 0) { return view('landing.pages.landing', [ 'cari' => 'filter', 'kepentingan_lokasi' => $kepentinganlokasi, 'kepentingan_harga' => $kepentinganharga, 'kepentingan_fasilitas' => $kepentinganfasilitas, 'kepentingan_jarak' => $kepentinganjarak, 'kepentingan_keamanan' => $kepentingankeamanan, 'kepentingan_aksesjalan' => $kepentinganaksesjalan, 'jenis_kost' => $jenis_kost, 'alternatifterbaik' => '', 'kost' => $alternatif, ]); } $vektorS = []; foreach ($alternatif as $key => $value) { $vektorS[$key] = pow($value->lokasi->bobot, $nilaipangkatlokasi) * pow($value->harga->bobot, $nilaipangkatharga) * pow($value->fasilitas->bobot, $nilaipangkatfasilitas) * pow($value->jarak->bobot, $nilaipangkatjarak) * pow($value->keamanan->bobot, $nilaipangkatkeamanan) * pow($value->aksesjalan->bobot, $nilaipangkataksesjalan); } // simpan vektor S ke array beserta id kost nya $vektorSwithId = []; foreach ($alternatif as $key => $value) { $vektorSwithId[$key] = [ 'id' => $value->id, 'vektorS' => $vektorS[$key] ]; } // penghitungan vektor V $vektorV = []; foreach ($alternatif as $key => $value) { $vektorV[$key] = $vektorSwithId[$key]['vektorS'] / array_sum($vektorS); } // simpan vektor V ke array beserta id kost nya $vektorVwithId = []; foreach ($alternatif as $key => $value) { $vektorVwithId[$key] = [ 'id' => $value->id, 'vektorV' => $vektorV[$key] ]; } // sorting vektor V dari yang terbesar $vektorVsorted = collect($vektorVwithId)->sortByDesc('vektorV')->values()->all(); // ambil id kost dan vektor V nya saja $alternatifterbaik = []; foreach ($vektorVsorted as $key => $value) { $alternatifterbaik[$key] = [ 'id' => $value['id'], 'vektorV' => $value['vektorV'] ]; } // tambahkan data kost dan vektor V nya $alternatifterbaikData = []; foreach ($alternatifterbaik as $key => $value) { $alternatifterbaikData[$key] = [ 'id' => $value['id'], 'vektorV' => $value['vektorV'], 'data' => Alternatif::with('kost')->where('id', $value['id'])->first() ]; } // pagination $currentPage = LengthAwarePaginator::resolveCurrentPage(); $itemCollection = collect($alternatifterbaikData); $perPage = 4; $currentPageItems = $itemCollection->slice(($currentPage * $perPage) - $perPage, $perPage)->all(); $paginatedItems = new LengthAwarePaginator($currentPageItems, count($itemCollection), $perPage); $paginatedItems->setPath($request->url()); if ($request->ajax()) { $view = view('landing.data.landing', [ 'alternatifterbaik' => $paginatedItems, 'cari' => 'filter', 'kepentinganlokasi' => $kepentinganlokasi, 'kepentinganharga' => $kepentinganharga, 'kepentinganfasilitas' => $kepentinganfasilitas, 'kepentinganjarak' => $kepentinganjarak, 'kepentingankeamanan' => $kepentingankeamanan, 'kepentinganaksesjalan' => $kepentinganaksesjalan, 'jenis_kost' => $jenis_kost, ])->render(); return response()->json(['html' => $view]); } return view('landing.pages.landing', [ 'palingrekomendasi' => $alternatifterbaikData[0], 'alternatifterbaik' => $paginatedItems, 'cari' => 'filter', 'kepentingan_lokasi' => $kepentinganlokasi, 'kepentingan_harga' => $kepentinganharga, 'kepentingan_fasilitas' => $kepentinganfasilitas, 'kepentingan_jarak' => $kepentinganjarak, 'kepentingan_keamanan' => $kepentingankeamanan, 'kepentingan_aksesjalan' => $kepentinganaksesjalan, 'jenis_kost' => $jenis_kost, ]); } } public function detailkost($id) { if (Auth::check() == null) { $kost = Kost::with([ 'aksesjalan', 'fasilitas', 'keamanan', 'harga', 'jarak', 'lokasi', ])->find($id); $kostfavorite = SimpanKost::select('id_kost')->groupBy('id_kost')->orderByRaw('COUNT(*) DESC')->where('id_kost', '!=', $id)->limit(5)->get(); return view('landing.pages.kost-detail', [ 'kost' => $kost, 'kostfavorite' => $kostfavorite, 'whitelist' => 'notlogin', ]); } else { if (Auth::user()->id_role == 1) { return redirect('/kost'); } else { $kost = Kost::with([ 'aksesjalan', 'fasilitas', 'keamanan', 'harga', 'jarak', 'lokasi', ])->find($id); $kostfavorite = SimpanKost::select('id_kost')->groupBy('id_kost')->orderByRaw('COUNT(*) DESC')->where('id_kost', '!=', $id)->limit(5)->get(); $cekwhitelist = SimpanKost::where('id_kost', $id)->where('id_user', Auth::user()->id)->first(); if ($cekwhitelist == null) { $whitelist = 0; } else { $whitelist = 1; } return view('landing.pages.kost-detail', [ 'kost' => $kost, 'kostfavorite' => $kostfavorite, 'whitelist' => $whitelist, ]); } } } public function whitelist(Request $request) { if (Auth::check() == null) { return redirect('/loginuser'); } else { if (Auth::user()->id_role == 1) { return redirect('/kost'); } else { $simpankost = SimpanKost::with('kost')->where('id_user', Auth::user()->id)->paginate(4); if ($request->ajax()) { $view = view('landing.data.whitelist', [ 'kost' => $simpankost, ])->render(); return response()->json(['html' => $view]); } return view('landing.pages.whitelist', [ 'kost' => $simpankost, ]); } } } public function simpanwhitelist(Request $request) { $id_kost = $request->id_kost; $id_user = $request->id_user; $cek = SimpanKost::where('id_kost', $id_kost)->where('id_user', $id_user)->first(); if ($cek != null) { return response()->json(['error' => 'Kost sudah ada di daftar simpan']); } SimpanKost::create([ 'id_kost' => $id_kost, 'id_user' => $id_user, ]); return response()->json(['success' => 'Kost berhasil disimpan ke daftar simpan']); } public function deletewhitelist(Request $request) { $id_kost = $request->id_kost; $id_user = $request->id_user; $cek = SimpanKost::where('id_kost', $id_kost)->where('id_user', $id_user)->first(); if ($cek == null) { return response()->json(['error' => 'Kost tidak ada di daftar simpan']); } SimpanKost::where('id_kost', $id_kost)->where('id_user', $id_user)->delete(); return response()->json(['success' => 'Kost berhasil dihapus dari daftar simpan']); } public function about() { return view('landing.pages.about'); } }