UsulanLaporanController.php 9.8 KB
<?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.');
    }
    
}