match_making/app/Http/Controllers/PemerintahController.php
2025-01-02 09:09:28 +07:00

760 lines
35 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\permohonanProject;
use App\Models\Preference;
use App\Models\PreferencesPermohonan;
use App\Models\Project;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class PemerintahController extends Controller
{
//ini kurang benar sedikit
// public function index(Request $request)
// {
// // Mengambil preferensi pengguna
// $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();
// // Inisialisasi query untuk proyek
// $query = permohonanProject::query();
// // Memastikan preferensi ada
// if ($preferences) {
// // Filter proyek berdasarkan kategori jika kategori ada
// if (!empty($preferences->kategori)) {
// $kategoriPreferences = json_decode($preferences->kategori, true);
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
// $query->whereIn('kategori', $kategoriPreferences);
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
// }
// }
// // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
// if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
// // Memastikan $bidangPreferences adalah array dan tidak kosong
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
// // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
// $query->where(function ($subQuery) use ($bidangPreferences) {
// foreach ($bidangPreferences as $bidang) {
// $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
// }
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
// }
// }
// // Filter berdasarkan batas terima tawaran jika ada
// if (!empty($preferences->batas_terima_tawaran)) {
// $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
// }
// // Memeriksa preferensi nominal_min dan nominal_max
// if (isset($preferences->range_min, $preferences->range_max)) {
// $rangeMin = $preferences->range_min;
// $rangeMax = $preferences->range_max;
// // Menambahkan filter untuk range_min dan range_max
// $query->where(function ($q) use ($rangeMin, $rangeMax) {
// $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
// });
// });
// }
// // Filter berdasarkan status jika diberikan
// if (!empty($preferences->status)) {
// $statusPreferences = json_decode($preferences->status, true);
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
// $query->where(function ($q) use ($statusPreferences) {
// $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
// })
// ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
// });
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
// }
// }
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
// }
// // Mengambil proyek sesuai dengan filter yang diterapkan
// $projects = $query->get();
// // Cek jika proyek ditemukan
// if ($projects->isEmpty()) {
// return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
// }
// return view('pemerintah.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mengambil preferensi pengguna
// $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();
// // Inisialisasi query untuk proyek
// $query = permohonanProject::query();
// // Memastikan preferensi ada
// if ($preferences) {
// // Filter proyek berdasarkan kategori jika kategori ada
// if (!empty($preferences->kategori)) {
// $kategoriPreferences = json_decode($preferences->kategori, true);
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
// $query->whereIn('kategori', $kategoriPreferences);
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
// }
// }
// // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
// if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
// // Memastikan $bidangPreferences adalah array dan tidak kosong
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
// // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
// $query->where(function ($subQuery) use ($bidangPreferences) {
// foreach ($bidangPreferences as $bidang) {
// $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
// }
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
// }
// }
// // Filter berdasarkan batas terima tawaran jika ada
// if (!empty($preferences->batas_terima_tawaran)) {
// $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
// }
// // Filter berdasarkan range nominal jika diberikan
// if (isset($preferences->range_min, $preferences->range_max)) {
// $rangeMin = $preferences->range_min;
// $rangeMax = $preferences->range_max;
// // Menambahkan filter untuk range_min dan range_max di berbagai kategori
// $query->where(function ($q) use ($rangeMin, $rangeMax) {
// $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
// });
// });
// }
// // Filter berdasarkan status jika diberikan
// if (!empty($preferences->status)) {
// $statusPreferences = json_decode($preferences->status, true);
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
// $query->where(function ($q) use ($statusPreferences) {
// $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
// })
// ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
// });
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
// }
// }
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
// }
// // Mengambil proyek sesuai dengan filter yang diterapkan
// $projects = $query->get();
// // Cek jika proyek ditemukan
// if ($projects->isEmpty()) {
// return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
// }
// return view('pemerintah.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mengambil preferensi pengguna
// $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();
// // Inisialisasi query untuk proyek
// $query = permohonanProject::query();
// // Memastikan preferensi ada
// if ($preferences) {
// // Filter proyek berdasarkan kategori jika kategori ada
// if (!empty($preferences->kategori)) {
// $kategoriPreferences = json_decode($preferences->kategori, true);
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
// $query->whereIn('kategori', $kategoriPreferences);
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
// }
// }
// // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
// if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
// // Memastikan $bidangPreferences adalah array dan tidak kosong
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
// // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
// $query->where(function ($subQuery) use ($bidangPreferences) {
// foreach ($bidangPreferences as $bidang) {
// $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
// }
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
// }
// }
// // Filter berdasarkan batas terima tawaran jika ada
// if (!empty($preferences->batas_terima_tawaran)) {
// $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
// }
// // Filter berdasarkan range nominal jika diberikan
// if (isset($preferences->range_min, $preferences->range_max)) {
// $rangeMin = $preferences->range_min;
// $rangeMax = $preferences->range_max;
// // Menambahkan filter untuk range_min dan range_max di berbagai kategori
// $query->where(function ($q) use ($rangeMin, $rangeMax) {
// $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
// })
// ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
// $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
// });
// });
// }
// // Filter berdasarkan status jika diberikan
// if (!empty($preferences->status)) {
// $statusPreferences = json_decode($preferences->status, true);
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
// $query->where(function ($q) use ($statusPreferences) {
// $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
// })
// ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
// });
// });
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
// }
// }
// // Ambil semua preferensi pengguna lain untuk perhitungan cosine similarity
// $allPreferences = PreferencesPermohonan::where('user_id', '!=', Auth::id())->get();
// // Buat matriks preferensi
// $userPreferencesMatrix = [];
// foreach ($allPreferences as $pref) {
// $userPreferencesMatrix[$pref->user_id] = json_decode($pref->kategori, true);
// }
// // Menghitung Cosine Similarity dengan preferensi pengguna yang sedang login
// $currentUserPreferences = json_decode($preferences->kategori, true);
// $similarities = [];
// foreach ($userPreferencesMatrix as $userId => $projectIds) {
// $similarity = $this->cosineSimilarity($currentUserPreferences, $projectIds);
// $similarities[$userId] = $similarity;
// }
// // Mengurutkan pengguna berdasarkan kesamaan tertinggi
// arsort($similarities);
// $topUsers = array_keys(array_slice($similarities, 0, 5, true)); // Ambil 5 pengguna teratas
// // Mengumpulkan proyek yang direkomendasikan dari pengguna teratas
// $recommendedProjects = [];
// foreach ($topUsers as $userId) {
// $userProjectIds = $userPreferencesMatrix[$userId];
// foreach ($userProjectIds as $projectId) {
// if (!in_array($projectId, json_decode($preferences->kategori, true))) {
// $recommendedProjects[$projectId] = true; // Menyimpan proyek yang belum dilihat
// }
// }
// }
// // Mengambil proyek yang direkomendasikan
// if (!empty($recommendedProjects)) {
// $query->orWhereIn('id', array_keys($recommendedProjects));
// }
// } else {
// return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
// }
// // Mengambil proyek sesuai dengan filter yang diterapkan
// $projects = $query->get();
// // Cek jika proyek ditemukan
// if ($projects->isEmpty()) {
// return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
// }
// return view('pemerintah.index', ['projects' => $projects]);
// }
// // Fungsi untuk menghitung cosine similarity
// private function cosineSimilarity($currentUserPrefs, $otherUserPrefs)
// {
// // Membuat vektor dari preferensi
// $currentUserVector = array_fill_keys(array_keys($otherUserPrefs), 0);
// foreach ($currentUserPrefs as $pref) {
// $currentUserVector[$pref] = 1; // Atau gunakan rating jika ada
// }
// // Menghitung dot product dan magnitudes
// $dotProduct = 0;
// $magnitudeA = 0;
// $magnitudeB = 0;
// foreach ($currentUserVector as $projectId => $value) {
// if (isset($otherUserPrefs[$projectId])) {
// $dotProduct += $value * 1; // Asumsikan preferensi pengguna lain adalah 1 jika ada
// }
// $magnitudeA += $value * $value;
// $magnitudeB += (isset($otherUserPrefs[$projectId]) ? 1 : 0) * (isset($otherUserPrefs[$projectId]) ? 1 : 0);
// }
// if ($magnitudeA == 0 || $magnitudeB == 0) {
// return 0; // Mencegah pembagian dengan nol
// }
// return $dotProduct / (sqrt($magnitudeA) * sqrt($magnitudeB));
// }
public function index(Request $request)
{
// Mengambil preferensi pengguna
$preferences = Preference::where('user_id', Auth::id())->first();
// Inisialisasi query untuk proyek
$query = permohonanProject::query();
// Memastikan preferensi ada
if ($preferences) {
// Filter proyek berdasarkan kategori jika kategori ada
if (!empty($preferences->kategori)) {
$kategoriPreferences = json_decode($preferences->kategori, true);
if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
$query->whereIn('kategori', $kategoriPreferences);
}
}
// Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
$bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
// Gunakan where untuk mencocokkan semua bidang
$query->where(function ($subQuery) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
}
}
// Filter berdasarkan batas terima tawaran jika ada
// if (!empty($preferences->batas_terima_tawaran)) {
// $query->where('batas_terima_tawaran', '>=', now()); // Perbaikan: Memastikan batas tawaran masih berlaku
// }
if (!empty($preferences->batas_terima_tawaran)) {
$query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
}
// Filter berdasarkan range nominal jika diberikan
if (isset($preferences->range_min, $preferences->range_max)) {
$rangeMin = $preferences->range_min;
$rangeMax = $preferences->range_max;
$query->where(function ($q) use ($rangeMin, $rangeMax) {
$q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('biaya', [$rangeMin, $rangeMax]);
})
->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
})
->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
})
->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('nominal', [$rangeMin, $rangeMax]);
});
});
}
// Filter berdasarkan status jika diberikan
if (!empty($preferences->status)) {
$statusPreferences = json_decode($preferences->status, true);
if (is_array($statusPreferences) && count($statusPreferences) > 0) {
$query->where(function ($q) use ($statusPreferences) {
$q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
$subQuery->whereIn('status_pelatihan', $statusPreferences);
})
->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
$subQuery->whereIn('status_pendanaan', $statusPreferences);
});
});
}
}
// Tambahan filter berdasarkan audiens
if (!empty($preferences->audiens)) {
$query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
// Filter audiens di relasi pelatihan
$pelatihanQuery->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
});
}
// Tambahan filter berdasarkan benefit
if (!empty($preferences->benefit)) {
$query->where(function ($q) use ($preferences) {
// Filter benefit dari tabel utama
$q->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('benefit_pelatihan', 'LIKE', '%' . $preferences->benefit . '%');
})
// Filter benefit dari relasi riset
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('benefit_riset', 'LIKE', '%' . $preferences->benefit . '%');
})
// Filter benefit dari relasi pendanaan
->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
$pendanaanQuery->where('benefit_pendanaan', 'LIKE', '%' . $preferences->benefit . '%');
});
});
}
// Tambahan filter berdasarkan lokasi
if (!empty($preferences->lokasi)) {
$query->where(function ($q) use ($preferences) {
// Filter lokasi dari tabel utama
$q->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('lokasi_pelatihan', 'LIKE', '%' . $preferences->lokasi . '%');
})
// Filter lokasi dari relasi pendanaan
->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
$pendanaanQuery->where('lokasi_pendanaan', 'LIKE', '%' . $preferences->lokasi . '%');
})
// Filter lokasi dari relasi riset
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
});
});
}
// Tambahan filter berdasarkan metodologi
if (!empty($preferences->metodologi)) {
$query->where(function ($q) use ($preferences) {
// Filter metodologi dari tabel utama
$q->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
});
});
}
// Tambahan filter berdasarkan rincian kebutuhan
if (!empty($preferences->rincian_kebutuhan)) {
$query->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
}
// Tambahan filter berdasarkan penerima manfaat
if (!empty($preferences->penerima_manfaat)) {
$query->where('penerima_manfaat_pengguna_project', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
}
} else {
return view('pemerintah.index', ['message' => 'Data Rekomendasi tidak ditemukan. Silahkan perbarui preferensi anda di profil']);
}
// Mengambil proyek sesuai dengan filter yang diterapkan
// $projects = $query->get();
$projects = $query->paginate(6);
// Cek jika proyek ditemukan
if ($projects->isEmpty()) {
return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada program yang ditemukan.']);
}
return view('pemerintah.index', ['projects' => $projects]);
}
public function search(Request $request)
{
// Ambil input pencarian dari request
$search = $request->input('search');
// Inisialisasi query untuk proyek
$query = permohonanProject::query();
// Filter proyek berdasarkan input pencarian jika ada
if (!empty($search)) {
$query->where(function ($q) use ($search) {
$q->where('judul_project', 'LIKE', '%' . $search . '%')
->orWhere('latar_belakang', 'LIKE', '%' . $search . '%')
->orWhere('kategori', 'LIKE', '%' . $search . '%')
->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $search . '%')
->orWhere('penerima_manfaat_pengguna_project', 'LIKE', '%' . $search . '%')
->orWhere('parameter_kesuksesan', 'LIKE', '%' . $search . '%')
->orWhere('rincian_kebutuhan', 'LIKE', '%' . $search . '%')
->orWhere('deskripsi_kolaborasi', 'LIKE', '%' . $search . '%')
->orWhere('kata_kunci', 'LIKE', '%' . $search . '%')
->orWhere('solusi_project', 'LIKE', '%' . $search . '%');
});
}
// Mengambil preferensi pengguna
$preferences = Preference::where('user_id', Auth::id())->first();
// Memastikan preferensi ada
if ($preferences) {
// Filter proyek berdasarkan kategori jika kategori ada
if (!empty($preferences->kategori)) {
$kategoriPreferences = json_decode($preferences->kategori, true);
if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
$query->whereIn('kategori', $kategoriPreferences);
}
}
// Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
$bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
$query->where(function ($subQuery) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
}
}
// Filter berdasarkan batas terima tawaran jika ada
if (!empty($preferences->batas_terima_tawaran)) {
$query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
}
// Filter berdasarkan range nominal jika diberikan
if (isset($preferences->range_min, $preferences->range_max)) {
$rangeMin = $preferences->range_min;
$rangeMax = $preferences->range_max;
$query->where(function ($q) use ($rangeMin, $rangeMax) {
$q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('biaya', [$rangeMin, $rangeMax]);
})
->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
})
->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
})
->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('nominal', [$rangeMin, $rangeMax]);
});
});
}
// Filter berdasarkan status jika diberikan
if (!empty($preferences->status)) {
$statusPreferences = json_decode($preferences->status, true);
if (is_array($statusPreferences) && count($statusPreferences) > 0) {
$query->where(function ($q) use ($statusPreferences) {
$q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
$subQuery->whereIn('status_pelatihan', $statusPreferences);
})
->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
$subQuery->whereIn('status_pendanaan', $statusPreferences);
});
});
}
}
// Tambahan filter berdasarkan audiens
if (!empty($preferences->audiens)) {
$query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
});
}
// Tambahan filter berdasarkan benefit
if (!empty($preferences->benefit)) {
$query->where(function ($q) use ($preferences) {
$q->where('benefit', 'LIKE', '%' . $preferences->benefit . '%')
->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('benefit_pelatihan', 'LIKE', '%' . $preferences->benefit . '%');
})
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('benefit_riset', 'LIKE', '%' . $preferences->benefit . '%');
})
->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
$pendanaanQuery->where('benefit_pendanaan', 'LIKE', '%' . $preferences->benefit . '%');
});
});
}
// Tambahan filter berdasarkan lokasi
if (!empty($preferences->lokasi)) {
$query->where(function ($q) use ($preferences) {
$q->where('lokasi', 'LIKE', '%' . $preferences->lokasi . '%')
->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('lokasi_pelatihan', 'LIKE', '%' . $preferences->lokasi . '%');
})
->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
$pendanaanQuery->where('lokasi_pendanaan', 'LIKE', '%' . $preferences->lokasi . '%');
})
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
});
});
}
// Tambahan filter berdasarkan metodologi
if (!empty($preferences->metodologi)) {
$query->where(function ($q) use ($preferences) {
$q->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%')
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
});
});
}
// Tambahan filter berdasarkan rincian kebutuhan
if (!empty($preferences->rincian_kebutuhan)) {
$query->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
}
// Tambahan filter berdasarkan penerima manfaat
if (!empty($preferences->penerima_manfaat)) {
$query->where('penerima_manfaat', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
}
}
// Jalankan query dan ambil hasilnya
$projects = $query->paginate(6);
// Tampilkan hasil jika ada proyek yang ditemukan
if ($projects->isEmpty()) {
return view('pemerintah.index', ['message' => 'Tidak ada program yang ditemukan.']);
}
return view('pemerintah.index', ['projects' => $projects]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}