MIF_E31221105/app/Http/Controllers/DataAlumniController.php

271 lines
8.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\DataAlumni;
use App\Models\Jabatan;
use App\Models\KualifikasiBidang;
use App\Models\TahunAngkatan;
use App\Imports\DataAlumniImport;
use Maatwebsite\Excel\Facades\Excel;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Illuminate\Http\Request;
class DataAlumniController extends Controller
{
/**
* Menampilkan data alumni.
*/
public function index(Request $request)
{
$alumni = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])->get();
$jabatans = Jabatan::all();
$kualifikasis = KualifikasiBidang::all();
$angkatans = TahunAngkatan::all();
$jumlahPerluReview = DataAlumni::where('perlu_review', true)->count();
// Cek apakah user memilih filter angkatan
$selectedAngkatan = $request->angkatan;
// Ambil data alumni, filter jika angkatan dipilih
$query = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan']);
if ($selectedAngkatan) {
$query->where('angkatan', $selectedAngkatan);
}
$alumni = $query->get();
$jabatanMap = $jabatans->pluck('Kategori_bidang_kerja', 'id_kategori')->toArray();
return view('data_alumni', compact('alumni', 'jabatans', 'kualifikasis', 'angkatans', 'jabatanMap','jumlahPerluReview'));
}
/**
* Menampilkan form tambah data (kalau pakai halaman terpisah).
*/
public function create()
{
$jabatans = Jabatan::all();
$kualifikasis = KualifikasiBidang::all();
$angkatans = TahunAngkatan::all();
return view('data_alumni', compact('jabatans', 'kualifikasis', 'angkatans'));
}
/**
* Menyimpan data alumni baru.
*/
public function store(Request $request)
{
$request->validate([
'nama' => 'required|string|max:255',
'nim' => 'required|string|max:10',
'angkatan' => 'required|integer',
'masa_tunggu' => 'nullable|integer',
'pekerjaan' => 'nullable|string|max:255',
'instansi' => 'nullable|string|max:255',
'link_linkedin' => 'nullable|string|max:255',
'Jenis_profesi' => 'required|string',
'lingkup_pekerjaan' => 'required|string',
'kualifikasi_bidang_kerja' => 'required|integer',
'jabatan' => 'required|integer',
]);
// Data baru dibuat oleh admin tidak perlu direview
$data = $request->all();
$data['perlu_review'] = false;
DataAlumni::create($request->all());
return redirect()->route('data_alumni.index')->with('success', 'Data alumni berhasil ditambahkan.');
}
/**
* Menampilkan detail (jika ada halaman detail).
*/
public function show(DataAlumni $dataAlumni)
{
return view('data_alumni.show', compact('dataAlumni'));
}
/**
* Menampilkan form edit (jika pakai halaman edit).
*/
public function edit(DataAlumni $dataAlumni)
{
$jabatans = Jabatan::all();
$kualifikasis = KualifikasiBidang::all();
$angkatans = TahunAngkatan::all();
return view('data_alumni.edit', compact('dataAlumni', 'jabatans', 'kualifikasis', 'angkatans'));
}
/**
* Memperbarui data alumni.
*/
public function update(Request $request, $id_alumni)
{
$request->validate([
'nama' => 'required|string|max:255',
'nim' => 'required|string|max:10',
'angkatan' => 'required|integer',
'masa_tunggu' => 'nullable|integer',
'pekerjaan' => 'nullable|string|max:255',
'instansi' => 'nullable|string|max:255',
'link_linkedin' => 'nullable|string|max:255',
'Jenis_profesi' => 'required|string',
'lingkup_pekerjaan' => 'required|string',
'kualifikasi_bidang_kerja' => 'required|integer',
'jabatan' => 'required|integer',
]);
$dataAlumni = DataAlumni::findOrFail($id_alumni);
// Update dari admin selalu menandai data sebagai sudah direview
$data = $request->all();
$data['perlu_review'] = false;
$dataAlumni->update($request->all());
return redirect()->back()->with('success', 'Data berhasil diperbarui.');
}
/**
* Menghapus data alumni.
*/
public function destroy($id_alumni)
{
$dataAlumni = DataAlumni::findOrFail($id_alumni);
$dataAlumni->delete();
// Redirect setelah berhasil
return response()->json(['success' => true]);
}
/**
* Import data dari file Excel.
*/
public function import(Request $request)
{
$request->validate([
'file' => 'required|mimes:xlsx,xls,csv'
]);
Excel::import(new DataAlumniImport, $request->file('file'));
return redirect()->route('data_alumni.index')->with('success', 'Data berhasil diimpor!');
}
// public function perluReview()
// {
// $alumniPerluReview = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])
// ->where('perlu_review', true)
// ->get();
// return view('admin.alumni_perlu_review', compact('alumniPerluReview'));
// }
// public function resetReview($id)
// {
// $alumni = DataAlumni::findOrFail($id);
// $alumni->perlu_review = false;
// $alumni->save();
// return back()->with('success', 'Data ditandai sebagai sudah direview');
// }
/**
* Menampilkan daftar alumni yang perlu direview.
*/
public function perluReview()
{
// Ambil semua data alumni yang perlu direview
$alumniPerluReview = DataAlumni::with(['jabatan', 'kualifikasiBidang', 'tahunAngkatan'])
->where('perlu_review', true)
->get();
// Siapkan data yang diperlukan untuk form review
$jabatans = Jabatan::all();
$kualifikasis = KualifikasiBidang::all();
return view('admin.alumni_perlu_review', compact('alumniPerluReview', 'jabatans', 'kualifikasis'));
}
/**
* Menandai data alumni sebagai sudah direview.
*/
public function resetReview($id)
{
$alumni = DataAlumni::findOrFail($id);
$alumni->perlu_review = false;
$alumni->save();
return back()->with('success', 'Data ditandai sebagai sudah direview');
}
/**
* Menangani review dan menyelesaikan proses review dengan mengubah data.
*/
// public function handleReview(Request $request, $id)
// {
// $request->validate([
// 'kualifikasi_bidang_kerja' => 'required|integer',
// 'jabatan' => 'required|integer',
// ]);
// $alumni = DataAlumni::findOrFail($id);
// // Update data kualifikasi dan jabatan berdasarkan review admin
// $alumni->kualifikasi_bidang_kerja = $request->kualifikasi_bidang_kerja;
// $alumni->jabatan = $request->jabatan;
// $alumni->perlu_review = false; // Tandai sebagai sudah direview
// $alumni->save();
// return redirect()->route('admin.alumni.perlu-review')
// ->with('success', 'Data alumni berhasil diupdate berdasarkan review');
// }
public function downloadTemplate()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Header
$sheet->setCellValue('A1', 'nama');
$sheet->setCellValue('B1', 'nim');
$sheet->setCellValue('C1', 'angkatan');
$sheet->setCellValue('D1', 'masa_tunggu');
$sheet->setCellValue('E1', 'pekerjaan');
$sheet->setCellValue('F1', 'instansi');
$sheet->setCellValue('G1', 'link_linkedin');
$sheet->setCellValue('H1', 'jenis_profesi');
$sheet->setCellValue('I1', 'lingkup_pekerjaan');
$sheet->setCellValue('J1', 'kualifikasi_bidang_kerja');
$sheet->setCellValue('K1', 'kelompok_jabatan');
// Contoh data (optional)
$sheet->setCellValue('A2', 'Contoh Nama');
$sheet->setCellValue('B2', 'E12345678');
$sheet->setCellValue('C2', '2020');
$sheet->setCellValue('D2', '3');
$sheet->setCellValue('E2', 'Programmer');
$sheet->setCellValue('F2', 'PT ABC');
$sheet->setCellValue('G2', 'https://linkedin.com/in/contoh');
$sheet->setCellValue('H2', 'Programmer');
$sheet->setCellValue('I2', 'Nasional');
$sheet->setCellValue('J2', 'Sangat erat');
$sheet->setCellValue('K2', 'Lulusan D3');
$writer = new Xlsx($spreadsheet);
$filename = 'template_data_alumni.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename=\"$filename\"");
$writer->save('php://output');
exit;
}
}