orderBy('tanggal', 'desc') ->orderBy('jam_mulai', 'desc') ->get(); return view('jadwal.jadwal', compact('data_jadwal')); } // 2. Proses Konfirmasi Latihan Selesai (Update Status + Upload Foto Kegiatan) public function konfirmasiSelesai(Request $request, $id) { $jadwal = Jadwal::findOrFail($id); // Validasi input dari modal $request->validate([ 'foto_bukti' => 'required|image|mimes:jpg,jpeg,png|max:2048', 'catatan_latihan' => 'nullable|string' ]); // Proses upload foto kegiatan pelatih ke folder storage/app/public/kegiatan_pelatih if ($request->hasFile('foto_bukti')) { $path = $request->file('foto_bukti')->store('kegiatan_pelatih', 'public'); $jadwal->foto_bukti = $path; } // Simpan catatan dan ubah status menjadi selesai $jadwal->catatan_latihan = $request->catatan_latihan; $jadwal->status = 'selesai'; $jadwal->save(); return redirect()->route('jadwal.index') ->with('success', 'Latihan ' . $jadwal->judul_kegiatan . ' telah dikonfirmasi selesai!'); } // 3. Menampilkan Form Tambah Jadwal public function create() { $data_kolat = Kolat::all(); // Ambil Anggota yang memiliki role 'Pelatih' dan statusnya 'Aktif' $data_pelatih = Anggota::whereHas('roles', function($query) { $query->where('nama_role', 'Pelatih'); }) ->with('kolatLatihan') ->where('status', 'Aktif') ->orderBy('nama_lengkap', 'asc') ->get(); return view('jadwal.jadwalcreate', compact('data_kolat', 'data_pelatih')); } // 4. Proses Simpan Jadwal Baru public function store(Request $request) { $request->validate([ 'judul_kegiatan' => 'required|string|max:255', 'kolat_id' => 'required|exists:kolat,id', 'pelatih_id' => 'required|exists:anggotas,id', 'jenis' => 'required|in:Rutin,Tambahan,Pengumuman', 'tanggal' => 'required|date', 'jam_mulai' => 'required', 'lokasi' => 'required|string', ]); Jadwal::create($request->all()); return redirect()->route('jadwal.index') ->with('success', 'Jadwal latihan berhasil ditambahkan!'); } // 5. Menampilkan Detail Jadwal (Opsional jika pakai modal) public function show($id) { $jadwal = Jadwal::with(['kolat', 'pelatih'])->findOrFail($id); return view('jadwal.show', compact('jadwal')); } // 6. Menampilkan Form Edit Jadwal public function edit($id) { $jadwal = Jadwal::findOrFail($id); $data_kolat = Kolat::all(); // Tetap filter agar hanya muncul daftar pelatih $data_pelatih = Anggota::whereHas('roles', function($query) { $query->where('nama_role', 'Pelatih'); }) ->with('kolatLatihan') ->where('status', 'Aktif') ->orderBy('nama_lengkap', 'asc') ->get(); return view('jadwal.editjadwal', compact('jadwal', 'data_kolat', 'data_pelatih')); } // 7. Proses Update Jadwal public function update(Request $request, $id) { $jadwal = Jadwal::findOrFail($id); $request->validate([ 'judul_kegiatan' => 'required|string|max:255', 'kolat_id' => 'required|exists:kolat,id', 'pelatih_id' => 'required|exists:anggotas,id', 'jenis' => 'required|in:Rutin,Tambahan,Pengumuman', 'tanggal' => 'required|date', 'jam_mulai' => 'required', 'lokasi' => 'required|string', ]); $jadwal->update($request->all()); return redirect()->route('jadwal.index') ->with('success', 'Jadwal berhasil diperbarui!'); } // 8. Proses Hapus Jadwal public function destroy($id) { $jadwal = Jadwal::findOrFail($id); // Cek dan hapus file foto bukti dari storage jika ada, biar hosting nggak penuh if ($jadwal->foto_bukti) { Storage::disk('public')->delete($jadwal->foto_bukti); } $jadwal->delete(); return redirect()->route('jadwal.index') ->with('success', 'Jadwal telah dihapus dari sistem.'); } }