user(); $penawaranProjects = PenawaranProject::with(['Pelatihan', 'Pendanaan', 'Riset'])->where('user_id', $user->id)->get(); return view('penawaran.index', compact('penawaranProjects')); } // Menampilkan halaman pelatihan public function pelatihan(Request $request) { // Ambil query search dari request $search = $request->input('search'); // Query untuk pelatihan dengan whereHas dan pencarian berdasarkan judul atau deskripsi $projects = PenawaranProject::with('pelatihan') ->whereHas('pelatihan', function ($query) use ($search) { if ($search) { $query->where('judul_project', 'like', "%{$search}%") ->orWhere('deskripsi_project', 'like', "%{$search}%"); } }) ->paginate(10); // Set pagination dengan 10 item per halaman // Passing variabel 'projects' dan 'search' ke view return view('penawaran.pelatihan', compact('projects', 'search')); } // Menampilkan halaman pendanaan public function pendanaan(Request $request) { // Ambil query search dari request $search = $request->input('search'); // Query untuk pendanaan dengan whereHas dan pencarian berdasarkan judul atau deskripsi $projects = PenawaranProject::with('pendanaan') ->whereHas('pendanaan', function ($query) use ($search) { if ($search) { $query->where('judul_project', 'like', "%{$search}%") ->orWhere('deskripsi_project', 'like', "%{$search}%"); } }) ->paginate(10); // Pagination 10 item per halaman // Passing variabel 'projects' dan 'search' ke view return view('penawaran.pendanaan', compact('projects', 'search')); } // Menampilkan halaman riset public function riset(Request $request) { // Ambil query search dari request $search = $request->input('search'); // Query untuk riset dengan whereHas dan pencarian berdasarkan judul atau deskripsi $projects = PenawaranProject::with('riset') ->whereHas('riset', function ($query) use ($search) { if ($search) { $query->where('judul_project', 'like', "%{$search}%") ->orWhere('deskripsi_project', 'like', "%{$search}%"); } }) ->paginate(10); // Pagination 10 item per halaman // Passing variabel 'projects' dan 'search' ke view return view('penawaran.riset', compact('projects', 'search')); } // Menampilkan form untuk menambah penawaran project baru public function create() { return view('penawaran.create'); } // Menyimpan penawaran project baru public function store(Request $request) { // Validasi input $rules = [ 'judul_project' => 'required|string|max:255', // 'bidang_sub_sektor_ekonomi_kreatif' => 'required|string|max:255', 'bidang_sub_sektor_ekonomi_kreatif' => 'required|array', 'bidang_sub_sektor_ekonomi_kreatif.*' => 'string', 'deskripsi_project' => 'required|string', 'jenis_penawaran' => 'required|in:pelatihan,pendanaan,riset', 'audiens' => 'required|string', 'batas_terima_tawaran' => 'required|date', 'kontak' => 'required|string|max:255', 'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', 'status' => 'required|string', 'benefit' => 'required|string', ]; // Validasi input berdasarkan kategori (jenis_penawaran) switch ($request->input('jenis_penawaran')) { case 'pelatihan': $rules = array_merge($rules, [ 'lokasi_pelatihan' => 'required|string', 'durasi_pelatihan' => 'required|numeric', 'jumlah_peserta' => 'required|numeric', ]); break; case 'pendanaan': $rules = array_merge($rules, [ 'jumlah_dana' => 'required|numeric', ]); break; case 'riset': $rules = array_merge($rules, [ 'institusi_penelitian' => 'required|string', 'bidang_penelitian' => 'required|string', 'lokasi_riset' => 'required|string', 'metodologi' => 'required|string', 'hasil' => 'required|string', ]); break; } // Validasi input $validatedData = $request->validate($rules); $foto_proyek = $request->file('foto_proyek') ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public') : null; $bidangSubSektor = $validatedData['bidang_sub_sektor_ekonomi_kreatif']; $bidangSubSektorString = implode(',', $bidangSubSektor); // $project = PenawaranProject::create([ // 'judul_project' => $request->input('judul_project'), // // 'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'), // 'bidang_sub_sektor_ekonomi_kreatif' => $request->input['bidang_sub_sektor_ekonomi_kreatif'], // 'bidang_sub_sektor_ekonomi_kreatif' => implode(',', $request->input['bidang_sub_sektor_ekonomi_kreatif']), // Simpan sebagai string // 'deskripsi_project' => $request->input('deskripsi_project'), // 'batas_terima_tawaran' => $request->input('batas_terima_tawaran'), // 'jenis_penawaran' => $request->input('jenis_penawaran'), // 'audiens' => $request->input('audiens'), // 'kontak' => $request->input('kontak'), // 'status' => $request->input('status'), // 'benefit' => $request->input('benefit'), // 'foto_proyek' => $foto_proyek, // 'user_id' => auth()->id(), // ]); $project = PenawaranProject::create([ 'judul_project' => $validatedData['judul_project'], 'bidang_sub_sektor_ekonomi_kreatif' => $bidangSubSektorString, // Simpan sebagai string 'deskripsi_project' => $validatedData['deskripsi_project'], 'batas_terima_tawaran' => $validatedData['batas_terima_tawaran'], 'jenis_penawaran' => $validatedData['jenis_penawaran'], 'audiens' => $validatedData['audiens'], 'kontak' => $validatedData['kontak'], 'status' => $validatedData['status'], 'benefit' => $validatedData['benefit'], 'foto_proyek' => $foto_proyek, 'user_id' => auth()->id(), ]); // Simpan data tambahan berdasarkan jenis_penawaran // switch ($request->input('jenis_penawaran')) { // case 'pelatihan': // PenawaranPelatihan::create([ // 'penawaran_project_id' => $project->id, // 'lokasi_pelatihan' => $request->input('lokasi_pelatihan'), // 'durasi_pelatihan' => $request->input('durasi_pelatihan'), // 'jumlah_peserta' => $request->input('jumlah_peserta'), // ]); // break; // case 'pendanaan': // PenawaranPendanaan::create([ // 'penawaran_project_id' => $project->id, // 'jumlah_dana' => $request->input('jumlah_dana'), // ]); // break; // case 'riset': // PenawaranRiset::create([ // 'penawaran_project_id' => $project->id, // 'institusi_penelitian' => $request->input('institusi_penelitian'), // 'bidang_penelitian' => $request->input('bidang_penelitian'), // 'lokasi_riset' => $request->input('lokasi_riset'), // 'metodologi' => $request->input('metodologi'), // 'hasil' => $request->input('hasil'), // ]); // break; // } // Simpan data tambahan berdasarkan jenis_penawaran switch ($validatedData['jenis_penawaran']) { case 'pelatihan': PenawaranPelatihan::create([ 'penawaran_project_id' => $project->id, 'lokasi_pelatihan' => $validatedData['lokasi_pelatihan'], 'durasi_pelatihan' => $validatedData['durasi_pelatihan'], 'jumlah_peserta' => $validatedData['jumlah_peserta'], ]); break; case 'pendanaan': PenawaranPendanaan::create([ 'penawaran_project_id' => $project->id, 'jumlah_dana' => $validatedData['jumlah_dana'], ]); break; case 'riset': PenawaranRiset::create([ 'penawaran_project_id' => $project->id, 'institusi_penelitian' => $validatedData['institusi_penelitian'], 'bidang_penelitian' => $validatedData['bidang_penelitian'], 'lokasi_riset' => $validatedData['lokasi_riset'], 'metodologi' => $validatedData['metodologi'], 'hasil' => $validatedData['hasil'], ]); break; } return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil ditambahkan.'); } // Menampilkan form untuk mengedit penawaran project public function edit($id) { $project = PenawaranProject::find($id); if (!$project) { return redirect()->route('penawaranprojects.index')->with('error', 'Project not found'); } $relatedData = null; switch ($project->jenis_penawaran) { case 'pelatihan': $relatedData = $project->pelatihan; break; case 'pendanaan': $relatedData = $project->pendanaan; break; case 'riset': $relatedData = $project->riset; break; } return view('penawaran.edit', compact('project', 'relatedData')); } // Memperbarui penawaran project yang sudah ada public function update(Request $request, $id) { // Find the project by ID $project = PenawaranProject::find($id); // If the project is not found, redirect with an error message if (!$project) { return redirect()->route('penawaranprojects.index')->with('error', 'Project not found'); } // Validasi input $rules = [ 'judul_project' => 'required|string|max:255', // 'bidang_sub_sektor_ekonomi_kreatif' => 'required|string|max:255', 'bidang_sub_sektor_ekonomi_kreatif' => 'required|array', 'bidang_sub_sektor_ekonomi_kreatif.*' => 'string', 'deskripsi_project' => 'required|string', 'jenis_penawaran' => 'required|in:pelatihan,pendanaan,riset', 'audiens' => 'required|string', 'batas_terima_tawaran' => 'required|date', 'kontak' => 'required|string|max:255', 'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', 'status' => 'required|string', 'benefit' => 'required|string', ]; // Validasi input berdasarkan kategori (jenis_penawaran) switch ($request->input('jenis_penawaran', $project->jenis_penawaran)) { case 'pelatihan': $rules = array_merge($rules, [ 'lokasi_pelatihan' => 'required|string', 'durasi_pelatihan' => 'required|numeric', 'jumlah_peserta' => 'required|numeric', ]); break; case 'pendanaan': $rules = array_merge($rules, [ 'jumlah_dana' => 'required|numeric', ]); break; case 'riset': $rules = array_merge($rules, [ 'institusi_penelitian' => 'required|string', 'bidang_penelitian' => 'required|string', 'lokasi_riset' => 'required|string', 'metodologi' => 'required|string', 'hasil' => 'required|string', ]); break; } // Validasi data input $validatedData = $request->validate($rules); // Mengubah array bidang_sub_sektor_ekonomi_kreatif menjadi string $validatedData['bidang_sub_sektor_ekonomi_kreatif'] = implode(',', $validatedData['bidang_sub_sektor_ekonomi_kreatif']); if ($request->hasFile('foto_proyek')) { $validatedData['foto_proyek'] = $request->file('foto_proyek') ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public') : $project->foto_proyek; } // Update data project $project->update($validatedData); // Update atau simpan data tambahan berdasarkan jenis_penawaran switch ($request->input('jenis_penawaran', $project->jenis_penawaran)) { case 'pelatihan': $project->Pelatihan()->updateOrCreate( ['penawaran_project_id' => $project->id], [ 'lokasi_pelatihan' => $request->input('lokasi_pelatihan'), 'durasi_pelatihan' => $request->input('durasi_pelatihan'), 'jumlah_peserta' => $request->input('jumlah_peserta'), ] ); break; case 'pendanaan': $project->Pendanaan()->updateOrCreate( ['penawaran_project_id' => $project->id], [ 'jumlah_dana' => $request->input('jumlah_dana'), ] ); break; case 'riset': $project->Riset()->updateOrCreate( ['penawaran_project_id' => $project->id], [ 'institusi_penelitian' => $request->input('institusi_penelitian'), 'bidang_penelitian' => $request->input('bidang_penelitian'), 'lokasi_riset' => $request->input('lokasi_riset'), 'metodologi' => $request->input('metodologi'), 'hasil' => $request->input('hasil'), ] ); break; } return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil diperbarui.'); } // Menghapus penawaran project public function destroy($id) { $penawaranProject = PenawaranProject::findOrFail($id); $penawaranProject->delete(); return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil dihapus.'); } public function showPelatihan($id) { // Find the project by its ID with related pelatihan data $project = PenawaranProject::with('pelatihan')->findOrFail($id); // Mengambil daftar pengikut untuk proyek ini $followers = FollowPenawaran::where('project_id', $id) ->where('status', 'accepted') // Hanya pengikut yang diterima ->with('user') // Ambil data pengguna yang mengikuti ->get(); // Return the view for Pelatihan with the related pelatihan data return view('penawaran.show_pelatihan', compact('project', 'followers')); } public function showPendanaan($id) { // Find the project by its ID $project = PenawaranProject::with('pendanaan')->findOrFail($id); // Mengambil daftar pengikut untuk proyek ini $followers = FollowPenawaran::where('project_id', $id) ->where('status', 'accepted') // Hanya pengikut yang diterima ->with('user') // Ambil data pengguna yang mengikuti ->get(); return view('penawaran.show_pendanaan', compact('project', 'followers')); } public function showRiset($id) { // Find the project by its ID $project = PenawaranProject::with('riset')->findOrFail($id); // Mengambil daftar pengikut untuk proyek ini $followers = FollowPenawaran::where('project_id', $id) ->where('status', 'accepted') // Hanya pengikut yang diterima ->with('user') // Ambil data pengguna yang mengikuti ->get(); return view('penawaran.show_riset', compact('project', 'followers')); } }