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

941 lines
43 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\PenawaranProject;
use App\Models\permohonanProject;
use App\Models\Preference;
use App\Models\PreferencesPermohonan;
use App\Models\Project;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AkademisiController extends Controller
{
/**
* Display a listing of the resource.
*/
// public function index(Request $request)
// {
// // Mendapatkan peran pengguna yang terautentikasi
// $userRole = Auth::user()->role;
// // Menentukan kategori yang diizinkan berdasarkan peran pengguna
// $allowedCategories = [];
// switch ($userRole) {
// case 'umkm':
// $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
// break;
// case 'akademisi':
// $allowedCategories = ['Pelatihan'];
// break;
// case 'komunitas':
// $allowedCategories = ['Pelatihan'];
// break;
// case 'pemerintah':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// case 'investor':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// default:
// $allowedCategories = [];
// }
// // Query builder untuk proyek
// $query = Project::query();
// // Menambahkan filter kategori jika kategori yang diizinkan ditentukan
// if (!empty($allowedCategories)) {
// $query->whereIn('kategori', $allowedCategories);
// }
// // Menambahkan filter jika ada parameter
// if ($request->has('judul_project') && $request->input('judul_project') != '') {
// $query->where('judul_project', 'like', '%' . $request->input('judul_project') . '%');
// }
// if ($request->has('bidang') && $request->input('bidang') != '') {
// $query->where('bidang_sub_sektor_ekonomi_kreatif', 'like', '%' . $request->input('bidang') . '%');
// }
// if ($request->has('tanggal_mulai') && $request->input('tanggal_mulai') != '') {
// $query->whereDate('tanggal_mulai', '>=', $request->input('tanggal_mulai'));
// }
// if ($request->has('tanggal_berakhir') && $request->input('tanggal_berakhir') != '') {
// $query->whereDate('tanggal_berakhir', '<=', $request->input('tanggal_berakhir'));
// }
// if ($request->has('kategori') && $request->input('kategori') != '') {
// $query->where('kategori', $request->input('kategori'));
// }
// if ($request->has('batas_terima_tawaran') && $request->input('batas_terima_tawaran') != '') {
// $query->whereDate('batas_terima_tawaran', '<=', $request->input('batas_terima_tawaran'));
// }
// // Mengambil proyek yang sudah difilter
// $projects = $query->get();
// return view('akademisi.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mendapatkan peran pengguna yang terautentikasi
// $userRole = Auth::user()->role;
// // Menentukan kategori yang diizinkan berdasarkan peran pengguna
// $allowedCategories = [];
// switch ($userRole) {
// case 'umkm':
// $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
// break;
// case 'akademisi':
// $allowedCategories = ['Pelatihan','Riset'];
// break;
// case 'komunitas':
// $allowedCategories = ['Pelatihan'];
// break;
// case 'pemerintah':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// case 'investor':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// default:
// $allowedCategories = [];
// }
// // Inisialisasi query untuk proyek
// $query = permohonanProject::query();
// // Filter hanya proyek yang sesuai dengan kategori yang diizinkan jika ada
// if (!empty($allowedCategories)) {
// $query->whereIn('kategori', $allowedCategories);
// }
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
// if ($request->has('bidang_sub_sektor_ekonomi_kreatif') && !empty($request->input('bidang_sub_sektor_ekonomi_kreatif'))) {
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
// }
// // Filter berdasarkan kategori jika diberikan
// if ($request->has('kategori') && !empty($request->input('kategori'))) {
// $query->whereIn('kategori', $request->input('kategori'));
// }
// // Filter berdasarkan batas terima tawaran jika diberikan
// if ($request->has('batas_terima_tawaran') && !empty($request->input('batas_terima_tawaran'))) {
// $query->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
// }
// // Filter berdasarkan nominal kebutuhan jika diberikan
// if ($request->has('nominal_min') && $request->has('nominal_max') && !empty($request->input('nominal_min')) && !empty($request->input('nominal_max'))) {
// $query->whereBetween('nominal_kebutuhan', [$request->input('nominal_min'), $request->input('nominal_max')]);
// }
// // Filter berdasarkan status jika diberikan
// if ($request->has('status') && !empty($request->input('status'))) {
// $status = $request->input('status');
// $query->whereHas('pelatihan', function ($subQuery) use ($status) {
// $subQuery->where('status_pelatihan', $status);
// })->orWhereHas('pendanaan', function ($subQuery) use ($status) {
// $subQuery->where('status_pendanaan', $status);
// });
// }
// // Mengambil proyek sesuai dengan filter yang diterapkan
// // Jika tidak ada filter yang diterapkan, ambil semua proyek
// $projects = $query->get();
// return view('akademisi.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mendapatkan peran pengguna yang terautentikasi
// $userRole = Auth::user()->role;
// // Menentukan kategori yang diizinkan berdasarkan peran pengguna
// $allowedCategories = [];
// switch ($userRole) {
// case 'umkm':
// $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
// break;
// case 'akademisi':
// $allowedCategories = ['Pelatihan', 'Riset'];
// break;
// case 'komunitas':
// $allowedCategories = ['Pelatihan'];
// break;
// case 'pemerintah':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// case 'investor':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// default:
// $allowedCategories = [];
// }
// // Inisialisasi query untuk proyek permohonan
// $permohonanQuery = permohonanProject::query();
// // Filter hanya proyek yang sesuai dengan kategori yang diizinkan
// if (!empty($allowedCategories)) {
// $permohonanQuery->whereIn('kategori', $allowedCategories);
// }
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
// if ($request->has('bidang_sub_sektor_ekonomi_kreatif') && !empty($request->input('bidang_sub_sektor_ekonomi_kreatif'))) {
// $permohonanQuery->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
// }
// // Filter berdasarkan batas terima tawaran jika diberikan
// if ($request->has('batas_terima_tawaran') && !empty($request->input('batas_terima_tawaran'))) {
// $permohonanQuery->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
// }
// if ($request->has('kategori') && $request->input('kategori') != '') {
// $permohonanQuery->where('kategori', $request->input('kategori'));
// }
// // Filter berdasarkan nominal kebutuhan jika diberikan
// if (
// $request->has('nominal_min') && $request->has('nominal_max') &&
// !empty($request->input('nominal_min')) && !empty($request->input('nominal_max'))
// ) {
// $permohonanQuery->whereBetween('nominal_kebutuhan', [
// $request->input('nominal_min'),
// $request->input('nominal_max')
// ]);
// }
// // Mengambil proyek permohonan
// $projectsPermohonan = $permohonanQuery->get();
// // Debugging untuk proyek permohonan
// // dd('Proyek Permohonan:', $projectsPermohonan);
// // Inisialisasi query untuk proyek penawaran
// $penawaranQuery = PenawaranProject::query();
// // Filter hanya proyek yang sesuai dengan kategori Pendanaan
// $penawaranQuery->where('jenis_penawaran', 'pendanaan');
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
// if ($request->has('bidang_sub_sektor_ekonomi_kreatif') && !empty($request->input('bidang_sub_sektor_ekonomi_kreatif'))) {
// $penawaranQuery->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
// }
// // Filter berdasarkan status jika diberikan
// if ($request->has('status') && !empty($request->input('status'))) {
// $penawaranQuery->where('status', $request->input('status'));
// }
// if ($request->has('jenis_penawaran') && $request->input('jenis_penawaran') != '') {
// $penawaranQuery->where('jenis_penawaran', $request->input('jenis_penawaran'));
// }
// if ($request->has('batas_terima_tawaran') && !empty($request->input('batas_terima_tawaran'))) {
// $penawaranQuery->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
// }
// // Mengambil proyek penawaran
// $projectsPenawaran = $penawaranQuery->get();
// // Gabungkan hasil proyek permohonan dan penawaran
// $projects = $projectsPermohonan->concat($projectsPenawaran); // Menggunakan concat
// // Tampilkan hasil proyek
// return view('akademisi.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mendapatkan peran pengguna yang terautentikasi
// $userRole = Auth::user()->role;
// // Menentukan kategori yang diizinkan berdasarkan peran pengguna
// $allowedCategories = [];
// switch ($userRole) {
// case 'umkm':
// $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
// break;
// case 'akademisi':
// $allowedCategories = ['Pelatihan', 'Riset'];
// break;
// case 'komunitas':
// $allowedCategories = ['Pelatihan'];
// break;
// case 'pemerintah':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// case 'investor':
// $allowedCategories = ['Pendanaan', 'Pelatihan'];
// break;
// default:
// $allowedCategories = [];
// }
// // Inisialisasi query untuk proyek permohonan
// $permohonanQuery = permohonanProject::query();
// // Filter kategori yang diizinkan
// if (!empty($allowedCategories)) {
// $permohonanQuery->whereIn('kategori', $allowedCategories);
// }
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
// if ($request->filled('bidang_sub_sektor_ekonomi_kreatif')) {
// $permohonanQuery->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
// }
// // Filter berdasarkan batas terima tawaran jika diberikan
// if ($request->filled('batas_terima_tawaran')) {
// $permohonanQuery->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
// }
// // Filter kategori tambahan jika diberikan
// if ($request->filled('kategori')) {
// $permohonanQuery->where('kategori', $request->input('kategori'));
// }
// // Filter berdasarkan nominal kebutuhan jika diberikan
// if ($request->filled('nominal_min') && $request->filled('nominal_max')) {
// $permohonanQuery->whereBetween('nominal_kebutuhan', [
// $request->input('nominal_min'),
// $request->input('nominal_max')
// ]);
// }
// // Mengambil proyek permohonan
// $projectsPermohonan = $permohonanQuery->get();
// // Inisialisasi query untuk proyek penawaran
// $penawaranQuery = PenawaranProject::query();
// // Filter hanya proyek yang sesuai dengan kategori Pendanaan
// $penawaranQuery->where('jenis_penawaran', 'pendanaan');
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
// if ($request->filled('bidang_sub_sektor_ekonomi_kreatif')) {
// $penawaranQuery->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
// }
// // Filter berdasarkan status jika diberikan
// if ($request->filled('status')) {
// $penawaranQuery->where('status', $request->input('status'));
// }
// // Filter berdasarkan jenis penawaran jika diberikan
// if ($request->filled('jenis_penawaran')) {
// $penawaranQuery->where('jenis_penawaran', $request->input('jenis_penawaran'));
// }
// // Filter berdasarkan batas terima tawaran jika diberikan
// if ($request->filled('batas_terima_tawaran')) {
// $penawaranQuery->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
// }
// // Mengambil proyek penawaran
// $projectsPenawaran = $penawaranQuery->get();
// // Gabungkan hasil proyek permohonan dan penawaran
// $projects = $projectsPermohonan->concat($projectsPenawaran);
// // Tampilkan hasil proyek
// return view('akademisi.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();
// $penawaran = PenawaranProject::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('akademisi.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('akademisi.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('akademisi.index', ['message' => 'Data Not Found: Status tidak valid.']);
// }
// }
// } else {
// return view('akademisi.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('akademisi.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
// }
// return view('akademisi.index', ['projects' => $projects]);
// }
// public function index(Request $request)
// {
// // Mengambil preferensi pengguna
// $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();
// // Inisialisasi query untuk proyek permohonan dan penawaran
// $queryPermohonan = permohonanProject::query();
// $queryPenawaran = PenawaranProject::query();
// // Memastikan preferensi ada
// if ($preferences) {
// // Filter berdasarkan kategori jika ada
// if (!empty($preferences->kategori)) {
// $kategoriPreferences = json_decode($preferences->kategori, true);
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
// $queryPermohonan->whereIn('kategori', $kategoriPreferences);
// $queryPenawaran->whereIn('jenis_penawaran', $kategoriPreferences);
// } else {
// return view('akademisi.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
// }
// }
// // Filter 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) {
// $queryPermohonan->where(function ($subQuery) use ($bidangPreferences) {
// foreach ($bidangPreferences as $bidang) {
// $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
// }
// });
// $queryPenawaran->where(function ($subQuery) use ($bidangPreferences) {
// foreach ($bidangPreferences as $bidang) {
// $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
// }
// });
// } else {
// return view('akademisi.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)) {
// $queryPermohonan->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
// $queryPenawaran->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;
// $queryPermohonan->whereBetween('nominal', [$rangeMin, $rangeMax]);
// $queryPenawaran->whereBetween('nominal', [$rangeMin, $rangeMax]);
// }
// // Filter berdasarkan status permohonan
// if (!empty($preferences->status)) {
// $statusPreferences = json_decode($preferences->status, true);
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
// // Untuk proyek permohonan, filter berdasarkan subquery pelatihan dan pendanaan
// $queryPermohonan->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);
// });
// });
// // Untuk proyek penawaran, filter berdasarkan kolom status
// $queryPenawaran->whereIn('status', $statusPreferences);
// } else {
// return view('akademisi.index', ['message' => 'Data Not Found: Status tidak valid.']);
// }
// }
// } else {
// return view('akademisi.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
// }
// // Gabungkan hasil dari query permohonan dan penawaran menggunakan concat
// $projects = $queryPermohonan->get()->concat($queryPenawaran->get());
// // Cek jika proyek ditemukan
// if ($projects->isEmpty()) {
// return view('akademisi.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
// }
// return view('akademisi.index', ['projects' => $projects]);
// }
public function index(Request $request)
{
// Mengambil preferensi pengguna
$preferences = Preference::where('user_id', Auth::id())->first();
// Inisialisasi query untuk proyek
$queryPermohonan = permohonanProject::query();
$queryPenawaran = PenawaranProject::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) {
$queryPermohonan->whereIn('kategori', $kategoriPreferences);
$queryPenawaran->whereIn('jenis_penawaran', $kategoriPreferences);
} else {
return view('akademisi.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);
if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
$queryPermohonan->where(function ($subQuery) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
$queryPenawaran->where(function ($subQuery) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
} else {
return view('akademisi.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)) {
$queryPermohonan->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
$queryPenawaran->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;
// $queryPermohonan->whereBetween('nominal', [$rangeMin, $rangeMax]);
// $queryPenawaran->whereBetween('nominal', [$rangeMin, $rangeMax]);
// }
// Filter berdasarkan range nominal jika diberikan
if (isset($preferences->range_min, $preferences->range_max)) {
$rangeMin = $preferences->range_min;
$rangeMax = $preferences->range_max;
// Filter untuk permohonan
$queryPermohonan->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 untuk penawaran
$queryPenawaran->where(function ($q) use ($rangeMin, $rangeMax) {
$q->whereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
$query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
});
});
}
// Filter berdasarkan status jika diberikan
if (!empty($preferences->status)) {
$statusPreferences = json_decode($preferences->status, true);
if (is_array($statusPreferences) && count($statusPreferences) > 0) {
// Untuk proyek permohonan, filter berdasarkan subquery pelatihan dan pendanaan
$queryPermohonan->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);
});
});
// Untuk proyek penawaran, filter berdasarkan kolom status
$queryPenawaran->whereIn('status', $statusPreferences);
}
}
// Tambahan filter berdasarkan audiens
if (!empty($preferences->audiens)) {
$queryPermohonan->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
$pelatihanQuery->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
});
$queryPenawaran->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
}
// Tambahan filter berdasarkan benefit
if (!empty($preferences->benefit)) {
$queryPermohonan->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 . '%');
});
});
$queryPenawaran->where('benefit', 'LIKE', '%' . $preferences->benefit . '%');
}
// Tambahan filter berdasarkan durasi
if (isset($preferences->durasi_min, $preferences->durasi_max)) {
$queryPermohonan->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
// Filter durasi pelatihan
$pelatihanQuery->whereBetween('durasi_pelatihan', [$preferences->durasi_min, $preferences->durasi_max]);
});
}
// Tambahan filter berdasarkan lokasi
if (!empty($preferences->lokasi)) {
// Filter untuk permohonan proyek
$queryPermohonan->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 riset
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
});
});
// Filter untuk penawaran proyek
$queryPenawaran->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 riset
->orWhereHas('riset', function ($risetQuery) use ($preferences) {
$risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
});
});
}
// Tambahan filter berdasarkan metodologi
if (!empty($preferences->metodologi)) {
// Filter berdasarkan metodologi pada tabel utama atau relasi riset
$queryPermohonan->where(function ($q) use ($preferences) {
$q->orWhereHas('riset', function ($risetQuery) use ($preferences) {
// Filter metodologi di dalam tabel relasi riset
$risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
});
});
$queryPenawaran->where(function ($q) use ($preferences) {
$q->orWhereHas('riset', function ($risetQuery) use ($preferences) {
// Filter metodologi di dalam tabel relasi riset
$risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
});
});
}
// Tambahan filter berdasarkan rincian kebutuhan
if (!empty($preferences->rincian_kebutuhan)) {
$queryPermohonan->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
$queryPenawaran->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
}
// Tambahan filter berdasarkan penerima manfaat
if (!empty($preferences->penerima_manfaat)) {
$queryPermohonan->where('penerima_manfaat', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
$queryPenawaran->where('penerima_manfaat', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
}
} else {
return view('akademisi.index', ['message' => 'Data Rekomendasi tidak ditemukan. Silahkan perbarui preferensi anda di profil']);
}
// Mengambil proyek sesuai dengan filter yang diterapkan
$projects = $queryPermohonan->get()->concat($queryPenawaran->get());
// $projects = $combinedProjects->paginate(6);
// $projects = $queryPermohonan->union($queryPenawaran)->paginate(6);
// Cek jika proyek ditemukan
if ($projects->isEmpty()) {
return view('akademisi.index', ['message' => 'Data Not Found: Tidak ada program yang ditemukan.']);
}
return view('akademisi.index', ['projects' => $projects]);
}
public function search(Request $request)
{
// Ambil input pencarian dari request
$search = $request->input('search');
// Inisialisasi query untuk proyek permohonan dan penawaran
$queryPermohonan = permohonanProject::query();
$queryPenawaran = PenawaranProject::query();
// Filter proyek berdasarkan input pencarian jika ada
if (!empty($search)) {
$queryPermohonan->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 . '%');
});
$queryPenawaran->where(function ($q) use ($search) {
$q->where('judul_project', 'LIKE', '%' . $search . '%')
->orWhere('benefit', 'LIKE', '%' . $search . '%')
->orWhere('deskripsi_project', 'LIKE', '%' . $search . '%');
});
}
// Mengambil preferensi pengguna
$preferences = Preference::where('user_id', Auth::id())->first();
// Memastikan preferensi ada sebelum melakukan filter
if ($preferences) {
// Filter berdasarkan kategori
if (!empty($preferences->kategori)) {
$kategoriPreferences = json_decode($preferences->kategori, true);
if (is_array($kategoriPreferences)) {
$queryPermohonan->whereIn('kategori', $kategoriPreferences);
$queryPenawaran->whereIn('jenis_penawaran', $kategoriPreferences);
}
}
// Filter berdasarkan bidang sub sektor ekonomi kreatif
if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
$bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
if (is_array($bidangPreferences)) {
$queryPermohonan->where(function ($q) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$q->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
$queryPenawaran->where(function ($q) use ($bidangPreferences) {
foreach ($bidangPreferences as $bidang) {
$q->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
}
});
}
}
// Filter berdasarkan batas terima tawaran
if (!empty($preferences->batas_terima_tawaran)) {
$queryPermohonan->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
$queryPenawaran->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
}
// Filter berdasarkan nominal kebutuhan
if (isset($preferences->range_min, $preferences->range_max)) {
$queryPermohonan->whereBetween('nominal', [$preferences->range_min, $preferences->range_max]);
$queryPenawaran->whereBetween('nominal', [$preferences->range_min, $preferences->range_max]);
}
// Filter berdasarkan status
if (!empty($preferences->status)) {
$statusPreferences = json_decode($preferences->status, true);
if (is_array($statusPreferences)) {
$queryPermohonan->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);
});
});
$queryPenawaran->whereIn('status', $statusPreferences);
}
}
// Filter tambahan berdasarkan preferensi lain (audiens, benefit, durasi, lokasi, metodologi)
$additionalFilters = [
'audiens' => 'audiens',
'benefit' => 'benefit',
'rincian_kebutuhan' => 'rincian_kebutuhan',
'penerima_manfaat' => 'penerima_manfaat',
'lokasi' => 'lokasi',
'metodologi' => 'metodologi'
];
foreach ($additionalFilters as $prefKey => $column) {
if (!empty($preferences->$prefKey)) {
$queryPermohonan->where($column, 'LIKE', '%' . $preferences->$prefKey . '%');
$queryPenawaran->where($column, 'LIKE', '%' . $preferences->$prefKey . '%');
}
}
// Filter berdasarkan durasi pelatihan
if (isset($preferences->durasi_min, $preferences->durasi_max)) {
$queryPermohonan->whereHas('pelatihan', function ($q) use ($preferences) {
$q->whereBetween('durasi_pelatihan', [$preferences->durasi_min, $preferences->durasi_max]);
});
}
}
// Ambil proyek sesuai dengan filter yang diterapkan
$projects = $queryPermohonan->get()->concat($queryPenawaran->get());
// Tampilkan hasil atau pesan jika tidak ada proyek
if ($projects->isEmpty()) {
return view('akademisi.index', ['message' => 'Tidak ada program yang ditemukan.']);
}
return view('akademisi.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)
{
//
}
}