MIF_31230115/manajemen_mp/app/Http/Controllers/JadwalController.php

151 lines
4.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Jadwal;
use App\Models\Kolat;
use App\Models\Anggota;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
class JadwalController extends Controller
{
// 1. Menampilkan Daftar Jadwal
public function index()
{
// Tambahkan 'presensi.anggota' agar modal konfirmasi bisa nampilin siapa aja yang hadir
$data_jadwal = Jadwal::with(['kolat', 'pelatih', 'presensi.anggota'])
->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.');
}
}