<?php namespace App\Http\Controllers\Admin\Laporan; use App\Http\Controllers\Controller; use App\Models\Directory_2_laporan; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; class LaporanController extends Controller { // Menampilkan daftar laporan dengan filter dan pagination public function index(Request $request) { $search = $request->input('search'); $tahun = $request->input('tahun'); // Ambil data dengan filter pencarian dan tahun $query = Directory_2_laporan::query(); // Tambahkan filter berdasarkan jenis halaman $routeName = $request->route()->getName(); if ($routeName === 'laporan.arsip') { $query->where('hasil_pelatihan', 'lulus'); // Arsip hanya menampilkan yang "lulus" } else { $query->where('hasil_pelatihan', 'tidak lulus'); // Usulan hanya menampilkan yang "tidak lulus" } $directory_2_laporans = $query->when($search, function ($query, $search) { return $query->where('judul_laporan', 'like', "%$search%"); }) ->when($tahun, function ($query, $tahun) { return $query->whereYear('tanggal_mulai', $tahun); }) ->orderBy('created_at', 'desc') ->paginate(10) ->appends($request->query()); // Ambil daftar tahun unik untuk filter dropdown sesuai dengan tipe halaman $years = Directory_2_laporan::selectRaw('YEAR(tanggal_mulai) as year') ->distinct() ->orderBy('year', 'desc') ->pluck('year') ->toArray(); return view('Admin.Laporan.' . ($routeName === 'laporan.arsip' ? 'arsip' : 'usulan'), compact('directory_2_laporans', 'years')); } // Menampilkan form tambah laporan public function create() { return view('Admin.Laporan.createusulan'); } // Menyimpan data laporan baru public function store(Request $request) { $request->validate([ 'nip' => 'required|integer', 'nama' => 'required|string', 'golongan_ruang' => 'required|string', 'jabatan' => 'required|string', 'unit_kerja' => 'required|string', 'email' => 'required|email', 'foto' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', 'nama_pelatihan' => 'required|string', 'pelaksanaan_pelatihan' => 'required|string', 'penyelenggara_pelatihan' => 'required|string', 'rumpun_pelatihan' => 'required|string', 'tanggal_mulai' => 'required|date', 'tanggal_selesai' => 'required|date', 'hasil_pelatihan' => 'required|in:lulus,tidak lulus', 'sertifikat' => 'nullable|file|mimes:pdf,jpg,png|max:2048', 'judul_laporan' => 'required|string', 'abstrak_laporan' => 'required|string', 'link_laporan' => 'required|url', 'Status_peserta' => 'required|in:Alumni,Non Alumni', 'keterangan' => 'nullable|string', ]); $laporan = new Directory_2_laporan($request->except('foto')); if ($request->hasFile('foto')) { $fotoPath = $request->file('foto')->store('uploads/foto', 'public'); $laporan->foto = $fotoPath; } $laporan->save(); return redirect()->route('laporan.usulan')->with('success', 'Laporan berhasil ditambahkan.'); } // Menampilkan form edit laporan public function edit($id) { $laporan = Directory_2_laporan::findOrFail($id); return view('Admin.Laporan.editlaporan', compact('laporan')); } // Menyimpan perubahan pada laporan public function update(Request $request, $id) { $laporan = Directory_2_laporan::findOrFail($id); $laporan->update($request->except('foto')); if ($request->hasFile('foto')) { if ($laporan->foto && Storage::disk('public')->exists($laporan->foto)) { Storage::disk('public')->delete($laporan->foto); } $fotoPath = $request->file('foto')->store('uploads/foto', 'public'); $laporan->foto = $fotoPath; $laporan->save(); } return redirect()->route('laporan.usulan')->with('success', 'Laporan berhasil diperbarui.'); } // Menghapus laporan public function destroy($id) { $laporan = Directory_2_laporan::findOrFail($id); $laporan->delete(); return redirect()->route('laporan.usulan')->with('success', 'Laporan berhasil dihapus!'); } public function approve($id) { $laporan = Directory_2_laporan::findOrFail($id); $laporan->hasil_pelatihan = 'lulus'; $laporan->save(); return redirect()->route('laporan.arsip')->with('success', 'Laporam berhasil disetujui.'); } }