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

873 lines
38 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Follow;
use App\Models\Pelatihan;
use App\Models\permohonanPelatihan;
use App\Models\permohonanPendanaan;
use App\Models\permohonanProject;
use App\Models\permohonanProyekInvestor;
use App\Models\permohonanRiset;
use App\Models\Pendanaan;
use App\Models\Project;
use App\Models\ProyekInvestor;
use App\Models\Riset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class permohonanProjectController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
// Mengambil pengguna yang sedang login
$user = auth()->user();
// Mengambil proyek yang terkait dengan pengguna yang sedang login
$projects = permohonanProject::where('user_id', $user->id)->get();
// Mengembalikan tampilan dengan data proyek
return view('project.index', ['projects' => $projects]);
}
// Menampilkan halaman pelatihan
public function pelatihan(Request $request)
{
$search = $request->input('search'); // Ambil parameter pencarian
// Query dengan pagination dan pencarian
$projects = PermohonanProject::with('pelatihan')
->whereHas('pelatihan', function ($query) use ($search) {
if ($search) {
$query->where('judul_project', 'like', "%{$search}%")
->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
}
})
->paginate(6); // Mengambil 6 proyek per halaman
return view('project.pelatihan', compact('projects', 'search'));
}
// Menampilkan halaman pendanaan
public function pendanaan(Request $request)
{
$search = $request->input('search'); // Ambil parameter pencarian
// Query dengan pagination dan pencarian
$projects = PermohonanProject::with('pendanaan')
->whereHas('pendanaan', function ($query) use ($search) {
if ($search) {
$query->where('judul_project', 'like', "%{$search}%")
->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
}
})
->paginate(6); // Mengambil 6 proyek per halaman
return view('project.pendanaan', compact('projects', 'search'));
}
// Menampilkan halaman riset
public function riset(Request $request)
{
$search = $request->input('search'); // Ambil parameter pencarian
// Query dengan pagination dan pencarian
$projects = PermohonanProject::with('riset')
->whereHas('riset', function ($query) use ($search) {
if ($search) {
$query->where('judul_project', 'like', "%{$search}%")
->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
}
})
->paginate(6); // Mengambil 6 proyek per halaman
return view('project.riset', compact('projects', 'search'));
}
// Menampilkan halaman proyek investor
public function proyekInvestor()
{
$projects = permohonanProject::with('proyekInvestor')->whereHas('proyekInvestor')->get();
return view('project.proyekInvestor', compact('projects'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('project.create');
}
/**
* Store a newly created resource in storage.
*/
// ProjectController.php
// public function store(Request $request)
// {
// // Validasi input
// $request->validate([
// 'judul_project' => 'required|string|max:255',
// 'bidang_sub_sektor_ekonomi_kreatif' => 'required|string|max:255',
// 'latar_belakang' => 'required|string',
// 'penerima_manfaat_pengguna_project' => 'required|string',
// 'solusi_project' => 'required|string',
// 'parameter_kesuksesan' => 'required|string',
// 'rincian_kebutuhan' => 'required|string',
// 'deskripsi_kolaborasi' => 'required|string',
// 'kata_kunci' => 'required|string|max:255',
// 'batas_terima_tawaran' => 'required|date',
// 'tanggal_mulai' => 'required|date',
// 'tanggal_berakhir' => 'required|date',
// 'nominal_kebutuhan' => 'required|numeric',
// 'kategori' => 'required|string|max:255',
// 'kontak' => 'required|string|max:255',
// 'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
// 'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
// 'checklist_komitmen' => 'required|accepted',
// 'checklist_persetujuan' => 'required|accepted',
// ]);
// // Handle file uploads
// $dokumen_pendukung = $request->file('dokumen_pendukung')
// ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
// : null;
// $foto_proyek = $request->file('foto_proyek')
// ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public')
// : null;
// // Simpan data ke database
// Project::create([
// 'judul_project' => $request->input('judul_project'),
// 'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'),
// 'latar_belakang' => $request->input('latar_belakang'),
// 'penerima_manfaat_pengguna_project' => $request->input('penerima_manfaat_pengguna_project'),
// 'solusi_project' => $request->input('solusi_project'),
// 'parameter_kesuksesan' => $request->input('parameter_kesuksesan'),
// 'rincian_kebutuhan' => $request->input('rincian_kebutuhan'),
// 'deskripsi_kolaborasi' => $request->input('deskripsi_kolaborasi'),
// 'kata_kunci' => $request->input('kata_kunci'),
// 'batas_terima_tawaran' => $request->input('batas_terima_tawaran'),
// 'tanggal_mulai' => $request->input('tanggal_mulai'),
// 'tanggal_berakhir' => $request->input('tanggal_berakhir'),
// 'nominal_kebutuhan' => $request->input('nominal_kebutuhan'),
// 'kategori' => $request->input('kategori'),
// 'kontak' => $request->input('kontak'),
// 'dokumen_pendukung' => $dokumen_pendukung,
// 'foto_proyek' => $foto_proyek,
// 'user_id' => auth()->id(),
// 'checklist_komitmen' => $request->has('checklist_komitmen'),
// 'checklist_persetujuan' => $request->has('checklist_persetujuan'),
// ]);
// return redirect()->route('projects.index')->with('success', 'Project created successfully.');
// }
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',
'latar_belakang' => 'required|string',
'penerima_manfaat_pengguna_project' => 'required|string',
'solusi_project' => 'required|string',
'parameter_kesuksesan' => 'required|string',
'rincian_kebutuhan' => 'required|string',
'deskripsi_kolaborasi' => 'required|string',
'kata_kunci' => 'required|string|max:255',
'batas_terima_tawaran' => 'required|date',
'tanggal_mulai' => 'required|date',
'tanggal_berakhir' => 'required|date',
'kategori' => 'required|string|max:255',
'kontak' => 'required|string|max:255',
'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg',
'checklist_komitmen' => 'required|accepted',
'checklist_persetujuan' => 'required|accepted',
];
// Tambahkan validasi dinamis sesuai kategori
switch ($request->input('kategori')) {
case 'Pelatihan':
$rules = array_merge($rules, [
'audiens' => 'required|string',
'biaya' => 'required|numeric',
'jumlah_peserta' => 'required|numeric',
'benefit_pelatihan' => 'required|string',
'lokasi_pelatihan' => 'required|string',
'status_pelatihan' => 'required|string',
]);
break;
case 'Pendanaan':
$rules = array_merge($rules, [
'jumlah_dana' => 'required|numeric',
'lokasi_pendanaan' => 'required|string',
'rencana_penggunaan_dana' => 'required|string',
'status_pendanaan' => 'required|string',
'benefit_pendanaan' => 'required|string',
]);
break;
case 'Riset':
$rules = array_merge($rules, [
'anggaran' => 'required|numeric',
'lokasi_riset' => 'required|string',
'metodologi' => 'required|string',
'hasil' => 'required|string',
'status_riset' => 'required|string',
'benefit_riset' => 'required|string',
]);
break;
case 'Project Investor':
$rules = array_merge($rules, [
'nominal' => 'required|numeric',
'rencana_implementasi' => 'required|string',
'status_project' => 'required|string',
'lokasi_project' => 'required|string',
'benefit_project' => 'required|string',
]);
break;
}
// $request->validate($rules);
$validatedData = $request->validate($rules);
// // Handle file uploads
// $dokumen_pendukung = $request->file('dokumen_pendukung')
// ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
// : null;
// $foto_proyek = $request->file('foto_proyek')
// ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public')
// : null;
$foto_proyek_path = null;
if ($request->hasFile('foto_proyek')) {
$foto_proyek = $request->file('foto_proyek');
// Menghasilkan nama file unik dengan timestamp
$uniquefoto_proyekName = time() . '_' . $foto_proyek->getClientOriginalName();
$foto_proyek_path = $foto_proyek->storeAs('foto_proyek', $uniquefoto_proyekName, 'public');
}
// Handle laporan keuangan upload
$dokumen_pendukung_path = null; // Inisialisasi path untuk laporan keuangan
if ($request->hasFile('dokumen_pendukung')) {
$dokumen_pendukung = $request->file('dokumen_pendukung');
// Menghasilkan nama file unik untuk laporan keuangan
$uniqueDokumenPendukungName = time() . '_' . $dokumen_pendukung->getClientOriginalName();
$dokumen_pendukung_path = $dokumen_pendukung->storeAs('dokumen_pendukung', $uniqueDokumenPendukungName, 'public');
}
$bidangSubSektor = $validatedData['bidang_sub_sektor_ekonomi_kreatif'];
$bidangSubSektorString = implode(',', $bidangSubSektor);
// Simpan data ke database
// $project = permohonanProject::create([
// 'judul_project' => $request->input('judul_project'),
// 'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'),
// 'latar_belakang' => $request->input('latar_belakang'),
// 'penerima_manfaat_pengguna_project' => $request->input('penerima_manfaat_pengguna_project'),
// 'solusi_project' => $request->input('solusi_project'),
// 'parameter_kesuksesan' => $request->input('parameter_kesuksesan'),
// 'rincian_kebutuhan' => $request->input('rincian_kebutuhan'),
// 'deskripsi_kolaborasi' => $request->input('deskripsi_kolaborasi'),
// 'kata_kunci' => $request->input('kata_kunci'),
// 'batas_terima_tawaran' => $request->input('batas_terima_tawaran'),
// 'tanggal_mulai' => $request->input('tanggal_mulai'),
// 'tanggal_berakhir' => $request->input('tanggal_berakhir'),
// 'kategori' => $request->input('kategori'),
// 'kontak' => $request->input('kontak'),
// 'dokumen_pendukung' => $dokumen_pendukung,
// 'foto_proyek' => $foto_proyek,
// 'user_id' => auth()->id(),
// 'checklist_komitmen' => $request->input('checklist_komitmen') === 'on',
// 'checklist_persetujuan' => $request->input('checklist_persetujuan') === 'on',
// ]);
$project = permohonanProject::create([
'judul_project' => $validatedData['judul_project'],
'bidang_sub_sektor_ekonomi_kreatif' => $bidangSubSektorString,
'latar_belakang' => $validatedData['latar_belakang'],
'penerima_manfaat_pengguna_project' => $validatedData['penerima_manfaat_pengguna_project'],
'solusi_project' => $validatedData['solusi_project'],
'parameter_kesuksesan' => $validatedData['parameter_kesuksesan'],
'rincian_kebutuhan' => $validatedData['rincian_kebutuhan'],
'deskripsi_kolaborasi' => $validatedData['deskripsi_kolaborasi'],
'kata_kunci' => $validatedData['kata_kunci'],
'batas_terima_tawaran' => $validatedData['batas_terima_tawaran'],
'tanggal_mulai' => $validatedData['tanggal_mulai'],
'tanggal_berakhir' => $validatedData['tanggal_berakhir'],
'kategori' => $validatedData['kategori'],
'kontak' => $validatedData['kontak'],
'dokumen_pendukung' => $dokumen_pendukung_path,
'foto_proyek' => $foto_proyek_path,
'user_id' => auth()->id(),
'checklist_komitmen' => $validatedData['checklist_komitmen'] === 'on',
'checklist_persetujuan' => $validatedData['checklist_persetujuan'] === 'on',
]);
// Simpan data tambahan berdasarkan kategori
// switch ($request->input('kategori')) {
// case 'Pelatihan':
// permohonanPelatihan::create([
// 'permohonan_project_id' => $project->id,
// 'audiens' => $request->input('audiens'),
// 'biaya' => $request->input('biaya'),
// 'jumlah_peserta' => $request->input('jumlah_peserta'),
// 'benefit_pelatihan' => $request->input('benefit_pelatihan'),
// 'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
// 'status_pelatihan' => $request->input('status_pelatihan'),
// ]);
// break;
// case 'Pendanaan':
// permohonanPendanaan::create([
// 'permohonan_project_id' => $project->id,
// 'jumlah_dana' => $request->input('jumlah_dana'),
// 'lokasi_pendanaan' => $request->input('lokasi_pendanaan'),
// 'rencana_penggunaan_dana' => $request->input('rencana_penggunaan_dana'),
// 'status_pendanaan' => $request->input('status_pendanaan'),
// 'benefit_pendanaan' => $request->input('benefit_pendanaan'),
// ]);
// break;
// case 'Riset':
// permohonanRiset::create([
// 'permohonan_project_id' => $project->id,
// 'anggaran' => $request->input('anggaran'),
// 'lokasi_riset' => $request->input('lokasi_riset'),
// 'metodologi' => $request->input('metodologi'),
// 'hasil' => $request->input('hasil'),
// 'status_riset' => $request->input('status_riset'),
// 'benefit_riset' => $request->input('benefit_riset'),
// ]);
// break;
// case 'Project Investor':
// permohonanProyekInvestor::create([
// 'permohonan_project_id' => $project->id,
// 'nominal' => $request->input('nominal'),
// 'rencana_implementasi' => $request->input('rencana_implementasi'),
// 'status_project' => $request->input('status_project'),
// 'lokasi_project' => $request->input('lokasi_project'),
// 'benefit_project' => $request->input('benefit_project'),
// ]);
// break;
// }
switch ($validatedData['kategori']) {
case 'Pelatihan':
permohonanPelatihan::create([
'permohonan_project_id' => $project->id,
'audiens' => $validatedData['audiens'],
'biaya' => $validatedData['biaya'],
'jumlah_peserta' => $validatedData['jumlah_peserta'],
'benefit_pelatihan' => $validatedData['benefit_pelatihan'],
'lokasi_pelatihan' => $validatedData['lokasi_pelatihan'],
'status_pelatihan' => $validatedData['status_pelatihan'],
]);
break;
case 'Pendanaan':
permohonanPendanaan::create([
'permohonan_project_id' => $project->id,
'jumlah_dana' => $validatedData['jumlah_dana'],
'lokasi_pendanaan' => $validatedData['lokasi_pendanaan'],
'rencana_penggunaan_dana' => $validatedData['rencana_penggunaan_dana'],
'status_pendanaan' => $validatedData['status_pendanaan'],
'benefit_pendanaan' => $validatedData['benefit_pendanaan'],
]);
break;
case 'Riset':
permohonanRiset::create([
'permohonan_project_id' => $project->id,
'anggaran' => $validatedData['anggaran'],
'lokasi_riset' => $validatedData['lokasi_riset'],
'metodologi' => $validatedData['metodologi'],
'hasil' => $validatedData['hasil'],
'status_riset' => $validatedData['status_riset'],
'benefit_riset' => $validatedData['benefit_riset'],
]);
break;
case 'Project Investor':
permohonanProyekInvestor::create([
'permohonan_project_id' => $project->id,
'nominal' => $validatedData['nominal'],
'rencana_implementasi' => $validatedData['rencana_implementasi'],
'status_project' => $validatedData['status_project'],
'lokasi_project' => $validatedData['lokasi_project'],
'benefit_project' => $validatedData['benefit_project'],
]);
break;
}
return redirect()->route('permohonanprojects.index')->with('success', 'Project created successfully.');
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
// Mencari proyek berdasarkan ID
$project = permohonanProject::find($id);
// Jika proyek ditemukan, tampilkan tampilan detail proyek
if ($project) {
return view('project.show', compact('project'));
} else {
return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
}
}
public function showPelatihan($id)
{
// Find the project by its ID with related pelatihan data
$project = permohonanProject::with('pelatihan')->findOrFail($id);
// Mengambil daftar pengikut untuk proyek ini
$followers = Follow::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('project.show_pelatihan', compact('project', 'followers'));
}
public function showPendanaan($id)
{
// Find the project by its ID
$project = permohonanProject::with('pendanaan')->findOrFail($id);
// Mengambil daftar pengikut untuk proyek ini
$followers = Follow::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('project.show_pendanaan', compact('project', 'followers'));
}
public function showRiset($id)
{
// Find the project by its ID
$project = permohonanProject::with('riset')->findOrFail($id);
// Mengambil daftar pengikut untuk proyek ini
$followers = Follow::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('project.show_riset', compact('project', 'followers'));
}
public function showProyekInvestor($id)
{
// Find the project by its ID
$project = permohonanProject::with('proyekInvestor')->findOrFail($id);
// Check if the project has related proyekInvestor data
if ($project->kategori === 'Project Investor' && $project->proyekInvestor) {
// Return the view for Proyek Investor with the related proyekInvestor data
return view('project.show_proyek_investor', compact('project'));
}
// If no related proyekInvestor data found, handle it appropriately
abort(404, 'Proyek Investor data not found for this project.');
}
/**
* Show the form for editing the specified resource.
*/
// public function edit(string $id)
// {
// $project = Project::find($id); // Mencari proyek berdasarkan ID
// if (!$project) {
// return redirect()->route('projects.index')->with('error', 'Project not found'); // Mengalihkan ke daftar proyek jika tidak ditemukan
// }
// return view('project.edit', compact('project'));
// }
public function edit($id)
{
$project = permohonanProject::find($id);
if (!$project) {
return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
}
$relatedData = null;
switch ($project->kategori) {
case 'Pelatihan':
$relatedData = $project->pelatihan;
break;
case 'Pendanaan':
$relatedData = $project->pendanaan;
break;
case 'Riset':
$relatedData = $project->riset;
break;
case 'Project Investor':
$relatedData = $project->proyekInvestor;
break;
}
return view('project.edit', compact('project', 'relatedData'));
}
/**
* Update the specified resource in storage.
*/
// public function update(Request $request, string $id)
// {
// // Mencari proyek berdasarkan ID
// $project = Project::find($id);
// // Jika proyek tidak ditemukan, kembalikan pesan error
// if (!$project) {
// return redirect()->route('projects.index')->with('error', 'Project not found');
// }
// // Validasi data
// $validated = $request->validate([
// 'judul_project' => 'sometimes|string|max:255',
// 'bidang_sub_sektor_ekonomi_kreatif' => 'sometimes|string|max:255',
// 'latar_belakang' => 'sometimes',
// 'penerima_manfaat_pengguna_project' => 'sometimes',
// 'solusi_project' => 'sometimes',
// 'parameter_kesuksesan' => 'sometimes',
// 'rincian_kebutuhan' => 'sometimes',
// 'deskripsi_kolaborasi' => 'sometimes',
// 'kata_kunci' => 'sometimes|string|max:255',
// 'batas_terima_tawaran' => 'sometimes|date',
// 'tanggal_mulai' => 'sometimes|date',
// 'tanggal_berakhir' => 'sometimes|date',
// 'nominal_kebutuhan' => 'sometimes|numeric',
// 'kategori' => 'sometimes|string|max:255',
// 'kontak' => 'sometimes|string|max:255',
// 'dokumen_pendukung' => 'nullable|file',
// 'checklist_komitmen' => 'required|accepted',
// 'checklist_persetujuan' => 'required|accepted',
// 'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
// ]);
// // Menyimpan foto proyek jika ada
// if ($request->hasFile('foto_proyek')) {
// // Hapus foto lama jika ada
// if ($project->foto_proyek) {
// Storage::disk('public')->delete($project->foto_proyek);
// }
// // Simpan foto baru dengan nama asli
// $fotoPath = $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public');
// $validated['foto_proyek'] = $fotoPath;
// }
// // Menyimpan dokumen pendukung jika ada
// if ($request->hasFile('dokumen_pendukung')) {
// // Hapus dokumen lama jika ada
// if ($project->dokumen_pendukung) {
// Storage::disk('public')->delete($project->dokumen_pendukung);
// }
// // Simpan dokumen baru dengan nama asli
// $dokumenPath = $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public');
// $validated['dokumen_pendukung'] = $dokumenPath;
// }
// // Memperbarui proyek dengan data yang telah divalidasi
// $project->update($validated);
// // Update data tambahan berdasarkan kategori
// if ($project->kategori === 'Pelatihan') {
// $pelatihan = Pelatihan::where('project_id', $project->id)->first();
// if ($pelatihan) {
// $pelatihan->update([
// 'audiens' => $request->input('audiens'),
// 'biaya' => $request->input('biaya'),
// 'jumlah_peserta' => $request->input('jumlah_peserta'),
// 'benefit_pelatihan' => $request->input('benefit_pelatihan'),
// 'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
// 'status_pelatihan' => $request->input('status_pelatihan'),
// ]);
// }
// } elseif ($project->kategori === 'Pendanaan') {
// $pendanaan = Pendanaan::where('project_id', $project->id)->first();
// if ($pendanaan) {
// $pendanaan->update([
// 'jumlah_dana' => $request->input('jumlah_dana'),
// 'lokasi_pendanaan' => $request->input('lokasi_pendanaan'),
// 'rencana_penggunaan_dana' => $request->input('rencana_penggunaan_dana'),
// 'status_pendanaan' => $request->input('status_pendanaan'),
// 'benefit_pendanaan' => $request->input('benefit_pendanaan'),
// ]);
// }
// } elseif ($project->kategori === 'Riset') {
// $riset = Riset::where('project_id', $project->id)->first();
// if ($riset) {
// $riset->update([
// 'anggaran' => $request->input('anggaran'),
// 'lokasi_riset' => $request->input('lokasi_riset'),
// 'metodologi' => $request->input('metodologi'),
// 'hasil' => $request->input('hasil'),
// 'status_riset' => $request->input('status_riset'),
// 'benefit_riset' => $request->input('benefit_riset'),
// ]);
// }
// } elseif ($project->kategori === 'Project Investor') {
// $projectInvestorDetails = ProyekInvestor::where('project_id', $project->id)->first();
// if ($projectInvestorDetails) {
// $projectInvestorDetails->update([
// 'nominal' => $request->input('nominal'),
// 'rencana_implementasi' => $request->input('rencana_implementasi'),
// 'status_project' => $request->input('status_project'),
// 'benefit_project' => $request->input('benefit_project'),
// ]);
// }
// }
// // Redirect ke halaman daftar proyek dengan pesan sukses
// return redirect()->route('projects.index')->with('success', 'Project updated successfully.');
// }
public function update(Request $request, $id)
{
// Find the project by ID
$project = permohonanProject::find($id);
// If the project is not found, redirect with an error message
if (!$project) {
return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
}
// Define base validation rules
$rules = [
'judul_project' => 'sometimes|string|max:255',
// 'bidang_sub_sektor_ekonomi_kreatif' => 'sometimes|string|max:255',
'bidang_sub_sektor_ekonomi_kreatif' => 'required|array',
'bidang_sub_sektor_ekonomi_kreatif.*' => 'string',
'latar_belakang' => 'sometimes|string',
'penerima_manfaat_pengguna_project' => 'sometimes|string',
'solusi_project' => 'sometimes|string',
'parameter_kesuksesan' => 'sometimes|string',
'rincian_kebutuhan' => 'sometimes|string',
'deskripsi_kolaborasi' => 'sometimes|string',
'kata_kunci' => 'sometimes|string|max:255',
'batas_terima_tawaran' => 'sometimes|date',
'tanggal_mulai' => 'sometimes|date',
'tanggal_berakhir' => 'sometimes|date',
'kategori' => 'sometimes|string|max:255',
'kontak' => 'sometimes|string|max:255',
'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
'checklist_komitmen' => 'sometimes|accepted',
'checklist_persetujuan' => 'sometimes|accepted',
];
// Dynamic validation rules based on the category
switch ($request->input('kategori', $project->kategori)) {
case 'Pelatihan':
$rules = array_merge($rules, [
'audiens' => 'sometimes|string',
'biaya' => 'sometimes|numeric',
'jumlah_peserta' => 'sometimes|numeric',
'benefit_pelatihan' => 'sometimes|string',
'lokasi_pelatihan' => 'sometimes|string',
'status_pelatihan' => 'sometimes|string',
]);
break;
case 'Pendanaan':
$rules = array_merge($rules, [
'jumlah_dana' => 'sometimes|numeric',
'lokasi_pendanaan' => 'sometimes|string',
'rencana_penggunaan_dana' => 'sometimes|string',
'status_pendanaan' => 'sometimes|string',
'benefit_pendanaan' => 'sometimes|string',
]);
break;
case 'Riset':
$rules = array_merge($rules, [
'anggaran' => 'sometimes|numeric',
'lokasi_riset' => 'sometimes|string',
'metodologi' => 'sometimes|string',
'hasil' => 'sometimes|string',
'status_riset' => 'sometimes|string',
'benefit_riset' => 'sometimes|string',
]);
break;
case 'Project Investor':
$rules = array_merge($rules, [
'nominal' => 'sometimes|numeric',
'rencana_implementasi' => 'sometimes|string',
'status_project' => 'sometimes|string',
'lokasi_project' => 'sometimes|string',
'benefit_project' => 'sometimes|string',
]);
break;
}
// Validate the request data
$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']);
// // Handle file uploads
// if ($request->hasFile('dokumen_pendukung')) {
// $validatedData['dokumen_pendukung'] = $request->file('dokumen_pendukung')
// ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
// : $project->dokumen_pendukung;
// }
// 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;
// }
// Handle file uploads
if ($request->hasFile('dokumen_pendukung')) {
$dokumen_pendukung = $request->file('dokumen_pendukung');
// Menghasilkan nama file unik
$uniqueDokumenPendukungName = time() . '_' . uniqid() . '_' . $dokumen_pendukung->getClientOriginalName();
$validatedData['dokumen_pendukung'] = $dokumen_pendukung->storeAs('dokumen_pendukung', $uniqueDokumenPendukungName, 'public');
} else {
$validatedData['dokumen_pendukung'] = $project->dokumen_pendukung; // Keep existing dokumen if not uploaded
}
if ($request->hasFile('foto_proyek')) {
$foto_proyek = $request->file('foto_proyek');
// Menghasilkan nama file unik
$uniqueFotoProyekName = time() . '_' . uniqid() . '_' . $foto_proyek->getClientOriginalName();
$validatedData['foto_proyek'] = $foto_proyek->storeAs('foto_proyek', $uniqueFotoProyekName, 'public');
} else {
$validatedData['foto_proyek'] = $project->foto_proyek; // Keep existing foto if not uploaded
}
// Update the main project data
$project->update($validatedData);
// Update or create related records based on the category
switch ($request->input('kategori', $project->kategori)) {
case 'Pelatihan':
$project->pelatihan()->updateOrCreate(
['permohonan_project_id' => $project->id],
$request->only([
'audiens',
'biaya',
'jumlah_peserta',
'benefit_pelatihan',
'lokasi_pelatihan',
'status_pelatihan'
])
);
break;
case 'Pendanaan':
$project->pendanaan()->updateOrCreate(
['permohonan_project_id' => $project->id],
$request->only([
'jumlah_dana',
'lokasi_pendanaan',
'rencana_penggunaan_dana',
'status_pendanaan',
'benefit_pendanaan'
])
);
break;
case 'Riset':
$project->riset()->updateOrCreate(
['permohonan_project_id' => $project->id],
$request->only([
'anggaran',
'lokasi_riset',
'metodologi',
'hasil',
'status_riset',
'benefit_riset'
])
);
break;
case 'Project Investor':
$project->proyekInvestor()->updateOrCreate(
['permohonan_project_id' => $project->id],
$request->only([
'nominal',
'rencana_implementasi',
'status_project',
'benefit_project'
])
);
break;
}
return redirect()->route('permohonanprojects.index')->with('success', 'Project updated successfully.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
try {
// Mencari proyek berdasarkan ID dan akan melemparkan pengecualian jika tidak ditemukan
$project = permohonanProject::findOrFail($id);
// Menghapus proyek dari database
$project->delete();
// Mengarahkan pengguna ke halaman daftar proyek dengan pesan sukses
return redirect()->route('permohonanprojects.index')->with('success', 'Project deleted successfully');
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
// Mengarahkan pengguna ke halaman daftar proyek dengan pesan error
return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
} catch (\Exception $e) {
// Mengarahkan pengguna ke halaman daftar proyek dengan pesan error
return redirect()->route('permohonanprojects.index')->with('error', 'An error occurred');
}
}
}