<?php namespace App\Http\Controllers; use App\Models\ArsipLaporan; use App\Models\UsulanLaporan; use Illuminate\Http\Request; use App\Models\Golongan; use App\Models\JenisPelatihan; use App\Models\Jabatan; use App\Models\MetodePelatihan; use App\Models\PelaksanaanPelatihan; use App\Models\UnitKerja; use Illuminate\Support\Facades\Storage; class UsulanLaporanController extends Controller { // Display paginated usulan diklat data public function index() { // Fetch usulan diklat data with pagination $usulan_laporan_diklat = UsulanLaporan::orderBy('created_at', 'desc') // Urutkan berdasarkan created_at secara descending ->paginate(10); return view('laporan.usulan', compact('usulan_laporan_diklat')); } // Show form to create new usulan diklat public function create() { $jabatan = Jabatan::all(); $metodePelaksanaan = MetodePelatihan::all(); $jenisPelatihan = JenisPelatihan::all(); $golongan = Golongan::all(); $unitKerja = UnitKerja::all(); $pelaksanaan = PelaksanaanPelatihan::all(); return view('laporan.createusulan',compact('jabatan','metodePelaksanaan','jenisPelatihan','golongan','unitKerja','pelaksanaan')); } // Store new usulan diklat data public function store(Request $request) { // Validate input and files $request->validate([ 'nip' => 'required', 'nama_penulis' => 'required', 'jabatan' => 'required', 'golongan' => 'required', 'unit_kerja' => 'required', 'jenis_pelatihan' => 'required', 'nama_pelatihan' => 'required', 'tahun_pelatihan' => 'required|numeric', 'pelaksanaan' => 'required', 'mode_pelatihan' => 'required', 'waktu_pelaksanaan' => 'required', 'tempat_pelaksanaan'=> 'required', 'biaya_per_orang' => 'nullable|numeric', 'judul_laporan' => 'required', 'latar_belakang' => 'required', 'link_katalog' => 'nullable|url', 'unggah_laporan' => 'nullable|mimes:pdf,doc,docx|max:2048', ]); // Create a new instance of UsulanDiklat model $usulan_laporan_diklat = new UsulanLaporan(); $usulan_laporan_diklat->nip = $request->nip; $usulan_laporan_diklat->nama_penulis = $request->nama_penulis; $usulan_laporan_diklat->jabatan = $request->jabatan; $usulan_laporan_diklat->golongan = $request->golongan; $usulan_laporan_diklat->unit_kerja = $request->unit_kerja; $usulan_laporan_diklat->jenis_pelatihan = $request->jenis_pelatihan; $usulan_laporan_diklat->nama_pelatihan = $request->nama_pelatihan; $usulan_laporan_diklat->tahun_pelatihan = $request->tahun_pelatihan; $usulan_laporan_diklat->pelaksanaan = $request->pelaksanaan; $usulan_laporan_diklat->mode_pelatihan = $request->mode_pelatihan; $usulan_laporan_diklat->waktu_pelaksanaan = $request->waktu_pelaksanaan; $usulan_laporan_diklat->tempat_pelaksanaan = $request->tempat_pelaksanaan; $usulan_laporan_diklat->biaya_per_orang = $request->biaya_per_orang; $usulan_laporan_diklat->judul_laporan = $request->judul_laporan; $usulan_laporan_diklat->latar_belakang = $request->latar_belakang; $usulan_laporan_diklat->link_katalog = $request->link_katalog; // Process file upload for report (PDF, DOC, DOCX) if ($request->hasFile('unggah_laporan')) { $file = $request->file('unggah_laporan'); $fileName = time() . '_' . $file->getClientOriginalName(); $file->move(public_path('uploads/reports'), $fileName); $usulan_laporan_diklat->unggah_laporan = 'uploads/reports/' . $fileName; } // Save data to the database $usulan_laporan_diklat->save(); // Redirect with success message return redirect()->route('laporan.usulan')->with('success', 'Usulan diklat berhasil ditambahkan.'); } // Show form to edit existing usulan diklat data // public function edit($id) // { // $diklat = UsulanDiklat::findOrFail($id); // return view('brosur.editusulan', compact('diklat')); // } // Update existing usulan diklat data in the database public function update(Request $request, $id) { // Validate input and files $request->validate([ 'nip' => 'required', 'nama_penulis' => 'required', 'jabatan' => 'required', 'golongan' => 'required', 'unit_kerja' => 'required', 'jenis_pelatihan' => 'required', 'nama_pelatihan' => 'required', 'tahun_pelatihan' => 'required|digits:4|integer|min:1901|max:2154', 'pelaksanaan' => 'required', 'tempat_pelaksanaan' => 'nullable', 'mode_pelatihan' => 'required', 'waktu_pelaksanaan' => 'required', 'judul_laporan' => 'required', 'latar_belakang' => 'required', 'unggah_laporan' => 'nullable|mimes:pdf,doc,docx|max:2048', 'status_ajuan' => 'required', ], [ 'tahun_pelatihan.digits' => 'Tahun pelatihan harus berupa angka 4 digit.', 'unggah_laporan.mimes' => 'Laporan harus dalam format PDF, DOC, atau DOCX.', 'unggah_laporan.max' => 'Ukuran file laporan maksimal 2MB.', ]); // Find usulan diklat by ID $usulan_laporan_diklat = UsulanLaporan::findOrFail($id); // Update data fields $usulan_laporan_diklat->nip = $request->nip; $usulan_laporan_diklat->nama_penulis = $request->nama_penulis; $usulan_laporan_diklat->jabatan = $request->jabatan; $usulan_laporan_diklat->golongan = $request->golongan; $usulan_laporan_diklat->unit_kerja = $request->unit_kerja; $usulan_laporan_diklat->jenis_pelatihan = $request->jenis_pelatihan; $usulan_laporan_diklat->nama_pelatihan = $request->nama_pelatihan; $usulan_laporan_diklat->tahun_pelatihan = $request->tahun_pelatihan; $usulan_laporan_diklat->pelaksanaan = $request->pelaksanaan; $usulan_laporan_diklat->tempat_pelaksanaan = $request->tempat_pelaksanaan; $usulan_laporan_diklat->mode_pelatihan = $request->mode_pelatihan; $usulan_laporan_diklat->waktu_pelaksanaan = $request->waktu_pelaksanaan; $usulan_laporan_diklat->judul_laporan = $request->judul_laporan; $usulan_laporan_diklat->latar_belakang = $request->latar_belakang; $usulan_laporan_diklat->status_ajuan = $request->status_ajuan; // Process file upload for report (PDF, DOC, DOCX), replacing old file if present // if ($request->hasFile('unggah_laporan')) { // // Delete old file if it exists // if ($usulan_laporan_diklat->unggah_laporan && file_exists(public_path($usulan_laporan_diklat->unggah_laporan))) { // unlink(public_path($usulan_laporan_diklat->unggah_laporan)); // } // usulan_laporan_diklat // // Save new file // $file = $request->file('unggah_laporan'); // $fileName = time() . '_' . $file->getClientOriginalName(); // $file->move(public_path('uploads/reports'), $fileName); // $usulan_laporan_diklat->unggah_laporan = 'uploads/reports/' . $fileName; // } if ($request->hasFile('unggah_laporan')) { $file = $request->file('unggah_laporan'); \Log::info('File uploaded: ' . $file->getClientOriginalName()); // Hapus file lama jika ada if ($usulan_laporan_diklat->unggah_laporan) { Storage::delete($usulan_laporan_diklat->unggah_laporan); } // Simpan file baru $fileName = time() . '_' . $file->getClientOriginalName(); $file->move(public_path('uploads/reports'), $fileName); $usulan_laporan_diklat->unggah_laporan = 'uploads/reports/' . $fileName; } // Save updates to the database $usulan_laporan_diklat->save(); // Redirect with success message return redirect()->route('laporan.usulan')->with('success', 'Usulan diklat berhasil diperbarui.'); } public function edit($id) { $usulan_laporan_diklat = UsulanLaporan::findOrFail($id); $jabatan = Jabatan::all(); $metodePelaksanaan = MetodePelatihan::all(); $jenisPelatihan = JenisPelatihan::all(); $golongan = Golongan::all(); $unitKerja = UnitKerja::all(); $pelaksanaan = PelaksanaanPelatihan::all(); return view('laporan.editusulan', compact('usulan_laporan_diklat','jabatan','metodePelaksanaan','jenisPelatihan','golongan','unitKerja','pelaksanaan')); } // Delete existing usulan diklat data public function destroys($id) { $diklat = UsulanLaporan::findOrFail($id); $diklat->delete(); return redirect()->route('laporan.usulan')->with('success', 'Usulan diklat berhasil dihapus.'); } public function approvelaporan($id) { // Ambil data dari tabel usulan_diklat berdasarkan ID $diklat = UsulanLaporan::find($id); if ($diklat) { // Cek apakah status_ajuan sudah "approved" atau "rejected" if ($diklat->status_ajuan !== 'Approved') { return redirect()->back()->with('error', 'Silakan ubah status ajuan menjadi "approved" '); } // Pindahkan data ke tabel approved_diklat ArsipLaporan::create($diklat->toArray()); // Hapus data dari tabel usulan_diklat $diklat->delete(); return redirect()->back()->with('success', 'Data berhasil disetujui dan dipindahkan.'); } return redirect()->back()->with('error', 'Data tidak ditemukan.'); } }