TIF_E41200744/app/Http/Controllers/Frontend/HomeController.php

191 lines
5.2 KiB
PHP

<?php
namespace App\Http\Controllers\Frontend;
use App\Models\Objek;
use App\Models\Criteria;
use Flash;
use App\Models\SubCriteria;
use App\Models\ObjekGallery;
use App\Models\ResultTopsis;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Repositories\CalculationRepository;
class HomeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
\DB::statement("SET SQL_MODE=''");
$input = $request->all();
if (count($input) < 2 && count($input) >= 1) {
$countInput = count($request->all());
if ($countInput < 2) {
return redirect()->route('wisata.index');
}
}
$data_criteria = Criteria::get();
$criteria = $data_criteria->map(function ($q) {
$sub = SubCriteria::where('criteria_id', $q->id)->get();
return [
'id' => $q->id,
'code' => $q->code,
'criteria_name' => $q->criteria_name,
'status' => $q->status,
'value' => $q->value,
'sub' => $sub,
];
});
// Lakukan filter berdasarkan kriteria yang dipilih
$filteredResults = ResultTopsis::query();
$filteredResults = $filteredResults
->select(
'result_topsis.*',
'objeks.id as objek_id',
'objeks.name',
'objeks.thumbnail'
)
->leftJoin('alternative', 'alternative.id', 'result_topsis.alternative_id')
->leftJoin('objeks', 'objeks.id', 'alternative.objek_id')
->leftJoin('analysis', 'alternative.id', 'analysis.alternative_id');
// Filter berdasarkan kriteria yang dipilih
if ($request->filled('harga')) {
$filteredResults->orWhere('analysis.sub_criteria_id', '=', $request->harga);
}
if ($request->filled('jarak')) {
$filteredResults->orWhere('analysis.sub_criteria_id', '=', $request->jarak);
}
if ($request->filled('akses')) {
$filteredResults->orWhere('analysis.sub_criteria_id', '=', $request->akses);
}
if ($request->filled('fasilitas')) {
$filteredResults->orWhere('analysis.sub_criteria_id', '=', $request->fasilitas);
}
$filteredResults = $filteredResults->orderBy('result_topsis.nilai', 'DESC')
->groupBy('result_topsis.alternative_id')
->get()
->take(6);
$objek = Objek::get();
// dd($objek);
$hasilPembagi = DB::table('divider')
->join('criteria', 'criteria.id', 'divider.criteria_id')
->select('divider.*', 'criteria.criteria_name', 'criteria.code')
->orderBy('criteria.id', 'asc')
->get();
$matriksNormalisasi = CalculationRepository::getMatrixNormalization();
$bobotTernormalisasi = CalculationRepository::getWeightNormalization();
$idealPositif = CalculationRepository::getIdealPositif();
$idealNegative = CalculationRepository::getIdealNegative();
$solusiIdealPositif = CalculationRepository::getSolusiIdealPositif();
$solusiIdealNegative = CalculationRepository::getSolusiIdealNegative();
$hasilTopsis = CalculationRepository::getHasil()->sortByDesc('nilai');
return view('frontend.home', compact(
'criteria',
'objek',
'hasilPembagi',
'matriksNormalisasi',
'bobotTernormalisasi',
'idealPositif',
'idealNegative',
'solusiIdealPositif',
'solusiIdealNegative',
'hasilTopsis'), ['recomendation' => $filteredResults]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$objek = Objek::find($id);
$gallery = ObjekGallery::where('objek_id', $id)->get();
return view('frontend.detail', compact('objek', 'gallery'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}