Workshop::count(), 'lokakarya' => Workshop::where('jenis', 'lokakarya')->count(), 'pelatihan' => Workshop::where('jenis', 'pelatihan')->count(), 'sosialisasi' => Workshop::where('jenis', 'sosialisasi')->count(), 'sesi' => SesiWorkshop::count(), 'peserta' => PesertaWorkshop::count(), ]); $query = Workshop::query(); if ($request->filled('search')) { $search = $request->search; $query->where(function($q) use ($search) { $q->where('judul', 'ilike', "%{$search}%") ->orWhere('deskripsi', 'ilike', "%{$search}%"); }); } if ($request->filled('jenis')) { $query->where('jenis', $request->jenis); } if ($request->filled('status')) { $query->where('status', $request->status); } if ($request->filled('tanggal_awal') && $request->filled('tanggal_akhir')) { $query->whereBetween('tanggal_awal', [$request->tanggal_awal, $request->tanggal_akhir]); } elseif ($request->filled('tanggal_awal')) { $query->where('tanggal_awal', '>=', $request->tanggal_awal); } elseif ($request->filled('tanggal_akhir')) { $query->where('tanggal_akhir', '<=', $request->tanggal_akhir); } $perPage = $request->input('per_page', 10); $workshops = $query->latest()->paginate($perPage); return view('program.workshop.index', compact('workshops', 'summary', 'title')); } public function create() { $programs = Aktivitas::latest()->get(); return view('program.workshop.add', compact('programs')); } public function store(Request $request) { $validated = $request->validate([ 'program_aktivitas_id' => 'nullable|integer', 'judul' => 'required|string|max:255', 'jenis' => 'required|string', 'tanggal_awal' => 'required|date', 'tanggal_akhir' => 'required|date|after_or_equal:tanggal_awal', 'status' => 'required|string', 'deskripsi' => 'nullable|string', ], [ 'program_aktivitas_id.integer' => 'Program aktivitas harus berupa angka.', 'judul.required' => 'Judul wajib diisi.', 'judul.string' => 'Judul harus berupa teks.', 'judul.max' => 'Judul maksimal 255 karakter.', 'jenis.required' => 'Jenis wajib diisi.', 'jenis.string' => 'Jenis harus berupa teks.', 'tanggal_awal.required' => 'Tanggal awal wajib diisi.', 'tanggal_awal.date' => 'Tanggal awal harus berupa tanggal yang valid.', 'tanggal_akhir.required' => 'Tanggal akhir wajib diisi.', 'tanggal_akhir.date' => 'Tanggal akhir harus berupa tanggal yang valid.', 'tanggal_akhir.after_or_equal' => 'Tanggal akhir harus setelah atau sama dengan tanggal awal.', 'status.required' => 'Status wajib diisi.', 'status.string' => 'Status harus berupa teks.', 'deskripsi.string' => 'Deskripsi harus berupa teks.', ]); $workshop = Workshop::create([ 'judul' => $request->judul, 'jenis' => $request->jenis, 'tanggal_awal' => $request->tanggal_awal, 'tanggal_akhir' => $request->tanggal_akhir, 'status' => $request->status, 'deskripsi' => $request->deskripsi, 'program_aktivitas_id' => $request->program_aktivitas_id ?? null, 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, ]); return response()->json([ 'status' => 'success', 'message' => 'Workshop berhasil disimpan sebagai Draft.' ]); } public function edit($id) { $workshop = Workshop::findOrFail($id); $programs = Aktivitas::latest()->get(); return view('program.workshop.edit', compact('workshop', 'programs')); } public function update(Request $request, $id) { $validated = $request->validate([ 'program_aktivitas_id' => 'nullable|integer', 'judul' => 'required|string|max:255', 'jenis' => 'required|string', 'tanggal_awal' => 'required|date', 'tanggal_akhir' => 'required|date|after_or_equal:tanggal_awal', 'status' => 'required|string', 'deskripsi' => 'nullable|string', ], [ 'program_aktivitas_id.integer' => 'Program aktivitas harus berupa angka.', 'judul.required' => 'Judul wajib diisi.', 'judul.string' => 'Judul harus berupa teks.', 'judul.max' => 'Judul maksimal 255 karakter.', 'jenis.required' => 'Jenis wajib diisi.', 'jenis.string' => 'Jenis harus berupa teks.', 'tanggal_awal.required' => 'Tanggal awal wajib diisi.', 'tanggal_awal.date' => 'Tanggal awal harus berupa tanggal yang valid.', 'tanggal_akhir.required' => 'Tanggal akhir wajib diisi.', 'tanggal_akhir.date' => 'Tanggal akhir harus berupa tanggal yang valid.', 'tanggal_akhir.after_or_equal' => 'Tanggal akhir harus setelah atau sama dengan tanggal awal.', 'status.required' => 'Status wajib diisi.', 'status.string' => 'Status harus berupa teks.', 'deskripsi.string' => 'Deskripsi harus berupa teks.', ]); $workshop = Workshop::findOrFail($id); $workshop->update([ 'judul' => $request->judul, 'jenis' => $request->jenis, 'tanggal_awal' => $request->tanggal_awal, 'tanggal_akhir' => $request->tanggal_akhir, 'status' => $request->status, 'deskripsi' => $request->deskripsi, 'program_aktivitas_id' => $request->program_aktivitas_id ?? null, 'updated_by' => auth()->user()->id, ]); return response()->json([ 'status' => 'success', 'message' => 'Perubahan workshop berhasil disimpan.' ]); } public function destroy($id) { $workshop = Workshop::findOrFail($id); $workshop->update(['deleted_by' => auth()->user()->id]); $workshop->delete(); return response()->json([ 'status' => 'success', 'message' => 'Workshop berhasil dihapus.' ]); } }