939 lines
47 KiB
PHP
939 lines
47 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\permohonanProject;
|
|
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 PemerintahControllerCopy 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
|
|
// $projects = Project::query();
|
|
|
|
// // Mengambil proyek yang sudah difilter
|
|
// $projects = $projects->get();
|
|
// return view('pemerintah.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'];
|
|
// 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('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();
|
|
|
|
// // Pastikan preferensi ada dan kategori tidak kosong
|
|
// if ($preferences && !empty($preferences->kategori)) {
|
|
// $kategoriPreferences = json_decode($preferences->kategori);
|
|
|
|
// // Filter proyek berdasarkan kategori yang sesuai dengan preferensi
|
|
// $query->whereIn('kategori', $kategoriPreferences);
|
|
// }
|
|
|
|
// // Filter berdasarkan bidang sub sektor ekonomi kreatif jika ada
|
|
// if ($preferences && !empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
|
|
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif);
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
// }
|
|
|
|
// // 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 untuk nominal_min dan nominal_max
|
|
// if (
|
|
// $request->has('nominal_min') && $request->has('nominal_max') &&
|
|
// !empty($request->input('nominal_min')) && !empty($request->input('nominal_max'))
|
|
// ) {
|
|
|
|
// $nominalMin = $request->input('nominal_min');
|
|
// $nominalMax = $request->input('nominal_max');
|
|
|
|
// // Menggunakan whereHas untuk memfilter proyek berdasarkan biaya, jumlah_dana, anggaran, dan nominal
|
|
// $query->where(function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereHas('pelatihan', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('biaya', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('pendanaan', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('jumlah_dana', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('riset', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('anggaran', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('proyekInvestor', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('nominal', [$nominalMin, $nominalMax]);
|
|
// });
|
|
// });
|
|
// }
|
|
|
|
|
|
|
|
// // Filter berdasarkan status jika diberikan
|
|
// if ($request->has('status') && !empty($request->input('status'))) {
|
|
// $statusPreferences = $request->input('status');
|
|
// $query->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
|
|
// })->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
|
|
// });
|
|
// }
|
|
|
|
// // Mengambil proyek sesuai dengan filter yang diterapkan
|
|
// $projects = $query->get();
|
|
|
|
// 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();
|
|
|
|
// // Jika preferensi dan kategori ada
|
|
// if ($preferences && !empty($preferences->kategori)) {
|
|
// $kategoriPreferences = json_decode($preferences->kategori);
|
|
|
|
// // Filter proyek berdasarkan kategori yang sesuai dengan preferensi
|
|
// $query->whereIn('kategori', $kategoriPreferences);
|
|
|
|
// // Jika setelah filter kategori tidak ada data, hentikan eksekusi
|
|
// // if ($query->count() == 0) {
|
|
// // return response()->json(['message' => 'Data kategori Not Found'], 404);
|
|
// // }
|
|
|
|
// // Jika bidang_sub_sektor_ekonomi_kreatif ada
|
|
// if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
|
|
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif);
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
|
|
// // Jika setelah filter bidang tidak ada data, hentikan eksekusi
|
|
// // if ($query->count() == 0) {
|
|
// // return response()->json(['message' => 'Data bidang Not Found'], 404);
|
|
// // }
|
|
|
|
// // Jika batas_terima_tawaran diberikan
|
|
// if ($preferences && !empty($preferences->batas_terima_tawaran)) {
|
|
// $batas_terima_tawaranPreferences = $preferences->batas_terima_tawaran;
|
|
|
|
// // Pastikan format tanggal yang diambil dari preferensi benar
|
|
// $formattedDate = date('Y-m-d', strtotime($batas_terima_tawaranPreferences));
|
|
|
|
// // Filter proyek berdasarkan batas_terima_tawaran
|
|
// $query->whereDate('batas_terima_tawaran', $formattedDate);
|
|
|
|
// // Debug query SQL yang dihasilkan untuk memverifikasi
|
|
// // dd($formattedDate, $query->toSql(), $query->getBindings());
|
|
|
|
// // Jika setelah filter tidak ada data, hentikan eksekusi
|
|
// // if ($query->count() == 0) {
|
|
// // return response()->json(['message' => 'Data batas Not Found'], 404);
|
|
// // }
|
|
// }
|
|
|
|
// // Jika nominal_min dan nominal_max diberikan
|
|
// if ($preferences && !empty($preferences->range_min) && !empty($preferences->range_max)) {
|
|
// // Mengambil range_min dan range_max dari preferensi
|
|
// $rangeMin = $preferences->range_min;
|
|
// $rangeMax = $preferences->range_max;
|
|
|
|
// // Filter proyek berdasarkan biaya dalam rentang yang diberikan
|
|
// $query->where(function ($q) use ($rangeMin, $rangeMax) {
|
|
// $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
|
|
// // Filter pelatihan berdasarkan biaya
|
|
// $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
|
|
// })
|
|
// ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
|
|
// // Filter pendanaan berdasarkan jumlah_dana
|
|
// $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
|
|
// })
|
|
// ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
|
|
// // Filter riset berdasarkan anggaran
|
|
// $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
|
|
// })
|
|
// ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
|
|
// // Filter proyek investor berdasarkan nominal
|
|
// $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
|
|
// });
|
|
// });
|
|
|
|
// // // Debugging untuk memastikan range_min dan range_max bekerja
|
|
// // dd($query->toSql(), $query->getBindings());
|
|
|
|
// // Jika setelah filter tidak ada data, hentikan eksekusi
|
|
// // if ($query->count() == 0) {
|
|
// // return response()->json(['message' => 'Data nominal Not Found'], 404);
|
|
// // }
|
|
|
|
|
|
// // Jika status diberikan
|
|
// if (!empty($preferences->status)) {
|
|
// $statusPreferences = json_decode($preferences->status); // Pastikan ini adalah array
|
|
// // Filter proyek berdasarkan status yang relevan dengan kategori
|
|
// $query->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
|
|
// })
|
|
// ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
|
|
// });
|
|
|
|
// // Jika setelah filter status tidak ada data, hentikan eksekusi
|
|
// // if ($query->count() == 0) {
|
|
// // return response()->json(['message' => 'Data status Not Found'], 404);
|
|
// // }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// // Mengambil proyek sesuai dengan filter yang diterapkan
|
|
// $projects = $query->get();
|
|
|
|
// // Jika tidak ada proyek yang ditemukan
|
|
// // if ($projects->isEmpty()) {
|
|
// // return response()->json(['message' => 'Data Not Found'], 404);
|
|
// // }
|
|
|
|
// 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);
|
|
// 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);
|
|
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
|
|
// // 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 untuk nominal_min dan nominal_max
|
|
// if ($request->has('nominal_min') && $request->has('nominal_max')) {
|
|
// $nominalMin = $request->input('nominal_min');
|
|
// $nominalMax = $request->input('nominal_max');
|
|
|
|
// // Memastikan nominal_min dan nominal_max tidak kosong
|
|
// if (!empty($nominalMin) && !empty($nominalMax)) {
|
|
// // Menggunakan whereHas untuk memfilter proyek berdasarkan biaya, jumlah_dana, anggaran, dan nominal
|
|
// $query->where(function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereHas('pelatihan', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('biaya', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('pendanaan', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('jumlah_dana', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('riset', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('anggaran', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->orWhereHas('proyekInvestor', function ($query) use ($nominalMin, $nominalMax) {
|
|
// $query->whereBetween('nominal', [$nominalMin, $nominalMax]);
|
|
// });
|
|
// });
|
|
|
|
// // Filter berdasarkan status jika diberikan
|
|
// if ($request->has('status') && !empty($request->input('status'))) {
|
|
// $statusPreferences = $request->input('status');
|
|
// $query->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pelatihan', $statusPreferences);
|
|
// })
|
|
// ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
|
|
// $subQuery->whereIn('status_pendanaan', $statusPreferences);
|
|
// });
|
|
// }
|
|
// } else {
|
|
// // Jika nominal_min dan nominal_max tidak valid, tampilkan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// } else {
|
|
// // Jika nominal_min dan nominal_max tidak diberikan, tampilkan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// } else {
|
|
// // Jika batas_terima_tawaran tidak diberikan, tampilkan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// } else {
|
|
// // Jika bidangPreferences kosong, tampilkan pesan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// } else {
|
|
// // Jika bidang_sub_sektor_ekonomi_kreatif tidak ada, tampilkan pesan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// } else {
|
|
// // Jika kategoriPreferences kosong, tampilkan pesan Data Not Found
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// // Mengambil proyek sesuai dengan filter yang diterapkan
|
|
// $projects = $query->get();
|
|
|
|
// // Memeriksa apakah proyek ditemukan
|
|
// if ($projects->isEmpty()) {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found']);
|
|
// }
|
|
|
|
// 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 (isset($preferences->kategori) && !empty($preferences->kategori)) {
|
|
// $kategoriPreferences = json_decode($preferences->kategori);
|
|
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
|
|
// $query->whereIn('kategori', $kategoriPreferences);
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak diberikan.']);
|
|
// }
|
|
|
|
// // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
|
|
// if (isset($preferences->bidang_sub_sektor_ekonomi_kreatif) && !empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
|
|
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif);
|
|
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang tidak diberikan.']);
|
|
// }
|
|
|
|
// if (isset($preferences->batas_terima_tawaran) && !empty($preferences->batas_terima_tawaran)) {
|
|
// $batasTerimaTawaranPreferences = json_decode($preferences->batas_terima_tawaran);
|
|
|
|
// // Tambahkan filter ke query jika nilai ada
|
|
// if (is_array($batasTerimaTawaranPreferences) && count($batasTerimaTawaranPreferences) > 0) {
|
|
// $query->whereIn('batas_terima_tawaran', $batasTerimaTawaranPreferences);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: batas tidak diberikan.']);
|
|
// }
|
|
|
|
|
|
// // Memeriksa preferensi nominal_min dan nominal_max
|
|
// if (isset($preferences->range_min) && isset($preferences->range_max)) {
|
|
// $rangeMin = json_decode($preferences->range_min);
|
|
// $rangeMax = json_decode($preferences->range_max);
|
|
|
|
|
|
// // Memastikan range_min dan range_max tidak null
|
|
// if ($rangeMin !== null && $rangeMax !== null) {
|
|
// // 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]);
|
|
// });
|
|
// });
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Nominal tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Nominal tidak diberikan.']);
|
|
// }
|
|
|
|
|
|
// // Filter berdasarkan status jika diberikan
|
|
// if (isset($preferences->status) && !empty($preferences->status)) {
|
|
// $statusPreferences = json_decode($preferences->status);
|
|
|
|
// // Memeriksa apakah statusPreferences adalah array dan tidak kosong
|
|
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
|
|
// $query->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: Status tidak diberikan.']);
|
|
// }
|
|
// }
|
|
|
|
// // 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 (isset($preferences->kategori) && !empty($preferences->kategori)) {
|
|
// $kategoriPreferences = json_decode($preferences->kategori);
|
|
// if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
|
|
// $query->whereIn('kategori', $kategoriPreferences);
|
|
// // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
|
|
// if (isset($preferences->bidang_sub_sektor_ekonomi_kreatif) && !empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
|
|
// $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif);
|
|
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
// // Filter batas terima tawaran jika ada
|
|
// if (isset($preferences->batas_terima_tawaran) && !empty($preferences->batas_terima_tawaran)) {
|
|
// $batasTerimaTawaranPreferences = json_decode($preferences->batas_terima_tawaran);
|
|
// if (is_array($batasTerimaTawaranPreferences) && count($batasTerimaTawaranPreferences) > 0) {
|
|
// $query->where('batas_terima_tawaran', $batasTerimaTawaranPreferences);
|
|
|
|
// // Memeriksa preferensi nominal_min dan nominal_max
|
|
// if (isset($preferences->range_min) && isset($preferences->range_max)) {
|
|
// $rangeMin = json_decode($preferences->range_min);
|
|
// $rangeMax = json_decode($preferences->range_max);
|
|
|
|
// // Memastikan range_min dan range_max tidak null
|
|
// if ($rangeMin !== null && $rangeMax !== null) {
|
|
// // 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 (isset($preferences->status) && !empty($preferences->status)) {
|
|
// $statusPreferences = json_decode($preferences->status);
|
|
// if (is_array($statusPreferences) && count($statusPreferences) > 0) {
|
|
// $query->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: Batas tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak diberikan.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Nominal tidak valid.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Nominal tidak diberikan.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Batas tidak diberikan.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang tidak diberikan.']);
|
|
// }
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak diberikan.']);
|
|
// }
|
|
// } 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]);
|
|
// }
|
|
|
|
//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);
|
|
// if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
// } else {
|
|
// return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif 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();
|
|
|
|
// // Cek apakah ada preferensi
|
|
// if ($preferences) {
|
|
// // Mengambil kategori dan bidang dari preferensi
|
|
// $kategoriPreferences = !empty($preferences->kategori) ? json_decode($preferences->kategori) : [];
|
|
// $bidangPreferences = !empty($preferences->bidang_sub_sektor_ekonomi_kreatif) ? json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif) : [];
|
|
|
|
// // Mengambil input dari request
|
|
// $batasTerimaTawaran = $request->input('batas_terima_tawaran');
|
|
// $nominalMin = $request->input('nominal_min');
|
|
// $nominalMax = $request->input('nominal_max');
|
|
// $statusPreferences = $request->input('status');
|
|
|
|
// // Cek semua kondisi filter
|
|
// if (
|
|
// (!empty($kategoriPreferences) && !empty($bidangPreferences)) &&
|
|
// (!is_null($batasTerimaTawaran) || !empty($batasTerimaTawaran)) &&
|
|
// (!empty($nominalMin) && !empty($nominalMax)) &&
|
|
// (!empty($statusPreferences))
|
|
// ) {
|
|
// // Filter berdasarkan kategori
|
|
// $query->whereIn('kategori', $kategoriPreferences);
|
|
|
|
// // Filter berdasarkan bidang sub sektor ekonomi kreatif
|
|
// $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $bidangPreferences);
|
|
|
|
// // Filter berdasarkan batas terima tawaran
|
|
// $query->where('batas_terima_tawaran', '<=', $batasTerimaTawaran);
|
|
|
|
// // Filter untuk nominal_min dan nominal_max
|
|
// $query->whereHas('pelatihan', function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereBetween('biaya', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->whereHas('pendanaan', function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereBetween('jumlah_dana', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->whereHas('riset', function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereBetween('anggaran', [$nominalMin, $nominalMax]);
|
|
// })
|
|
// ->whereHas('proyekInvestor', function ($q) use ($nominalMin, $nominalMax) {
|
|
// $q->whereBetween('nominal', [$nominalMin, $nominalMax]);
|
|
// });
|
|
|
|
// // Filter berdasarkan status jika diberikan
|
|
// $query->whereHas('pelatihan', function ($q) use ($statusPreferences) {
|
|
// $q->whereIn('status_pelatihan', $statusPreferences);
|
|
// })
|
|
// ->whereHas('pendanaan', function ($q) use ($statusPreferences) {
|
|
// $q->whereIn('status_pendanaan', $statusPreferences);
|
|
// })
|
|
// ->whereHas('riset', function ($q) use ($statusPreferences) {
|
|
// $q->whereIn('status_riset', $statusPreferences);
|
|
// });
|
|
// }
|
|
// }
|
|
|
|
// // Mengambil proyek sesuai dengan filter yang diterapkan
|
|
// $projects = $query->get();
|
|
|
|
// // Jika tidak ada proyek yang ditemukan, tampilkan pesan atau redirect
|
|
// if ($projects->isEmpty()) {
|
|
// return view('pemerintah.no_results'); // Ganti dengan tampilan yang sesuai
|
|
// }
|
|
|
|
// return view('pemerintah.index', ['projects' => $projects]);
|
|
// }
|
|
|
|
|
|
|
|
// public function index(Request $request)
|
|
// {
|
|
// // Ambil ID pengguna yang sedang login
|
|
// $userId = auth()->id(); // Menggunakan auth helper untuk mengambil ID pengguna yang login
|
|
|
|
// // Ambil semua proyek
|
|
// $projects = permohonanProject::all();
|
|
// $userPreferences = PreferencesPermohonan::all();
|
|
|
|
// // Membangun matriks preferensi pengguna-proyek
|
|
// $matrix = [];
|
|
// foreach ($userPreferences as $preference) {
|
|
// $userId = $preference->user_id;
|
|
// $kategoriPreferences = json_decode($preference->kategori);
|
|
|
|
// foreach ($projects as $project) {
|
|
// // Cek jika proyek dalam kategori yang disukai pengguna
|
|
// if (in_array($project->kategori, $kategoriPreferences)) {
|
|
// $matrix[$userId][$project->id] = 1; // Menyukai
|
|
// } else {
|
|
// $matrix[$userId][$project->id] = 0; // Tidak menyukai
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// // Menghitung similarity antara pengguna yang berbeda
|
|
// $similarities = [];
|
|
// foreach ($matrix as $otherUserId => $preferences) {
|
|
// if ($otherUserId != $userId) {
|
|
// $similarities[$otherUserId] = $this->cosineSimilarity($matrix[$userId], $preferences);
|
|
// }
|
|
// }
|
|
|
|
// // Menyortir pengguna berdasarkan kesamaan
|
|
// arsort($similarities);
|
|
|
|
// // Mengambil rekomendasi berdasarkan pengguna yang paling mirip
|
|
// $recommendedProjects = [];
|
|
// foreach ($similarities as $otherUserId => $similarity) {
|
|
// foreach ($projects as $project) {
|
|
// if ($matrix[$otherUserId][$project->id] == 1 && !isset($matrix[$userId][$project->id])) {
|
|
// // Jika proyek disukai oleh pengguna mirip tapi belum disukai oleh pengguna saat ini
|
|
// $recommendedProjects[$project->id] = $project;
|
|
// }
|
|
// }
|
|
// // Batasi jumlah rekomendasi jika perlu
|
|
// if (count($recommendedProjects) >= 5) break; // Misalnya, batasi 5 rekomendasi
|
|
// }
|
|
|
|
// return view('pemerintah.index', ['projects' => array_values($recommendedProjects)]);
|
|
// }
|
|
|
|
// private function cosineSimilarity($vecA, $vecB)
|
|
// {
|
|
// $dotProduct = 0;
|
|
// $magnitudeA = 0;
|
|
// $magnitudeB = 0;
|
|
|
|
// foreach ($vecA as $key => $value) {
|
|
// if (isset($vecB[$key])) {
|
|
// $dotProduct += $value * $vecB[$key];
|
|
// }
|
|
// $magnitudeA += $value * $value;
|
|
// }
|
|
|
|
// foreach ($vecB as $value) {
|
|
// $magnitudeB += $value * $value;
|
|
// }
|
|
|
|
// if ($magnitudeA == 0 || $magnitudeB == 0) {
|
|
// return 0; // Menghindari pembagian dengan nol
|
|
// }
|
|
|
|
// return $dotProduct / (sqrt($magnitudeA) * sqrt($magnitudeB));
|
|
// }
|
|
|
|
|
|
|
|
/**
|
|
* 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)
|
|
{
|
|
//
|
|
}
|
|
}
|