429 lines
17 KiB
PHP
429 lines
17 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\FollowPenawaran;
|
|
use App\Models\PenawaranProject;
|
|
use App\Models\PenawaranPelatihan;
|
|
use App\Models\PenawaranPendanaan;
|
|
use App\Models\PenawaranRiset;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PenawaranProjectController extends Controller
|
|
{
|
|
// Menampilkan semua penawaran projects
|
|
public function index()
|
|
{
|
|
$user = auth()->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'));
|
|
}
|
|
}
|