Files
lms-v2/app/Http/Controllers/Admin/DepartmentController.php
T
2026-05-30 22:15:16 +07:00

108 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Department;
use Illuminate\Http\Request;
use Barryvdh\DomPDF\Facade\Pdf; // Jika pakai DomPDF
use Maatwebsite\Excel\Facades\Excel; // Jika pakai Laravel-Excel
class DepartmentController extends Controller
{
public function index(Request $request)
{
// 1. Inisialisasi query builder dari model Department
$query = Department::query();
// 2. Fitur Pencarian (Filter)
if ($request->filled('search')) {
$search = $request->search;
$query->where('name', 'like', "%{$search}%")
->orWhere('code', 'like', "%{$search}%");
}
// 3. Eksekusi query dengan pagination dan pertahankan parameter URL
$departments = $query->latest()->paginate(10)->withQueryString();
// 4. Total rekor untuk ditampilkan di UI
$totalRecords = $departments->total();
return view('pages.admin.departments.index', compact('departments', 'totalRecords'));
}
public function create()
{
return view('pages.admin.departments.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255|unique:departments,name',
'code' => 'nullable|string|max:50|unique:departments,code',
]);
Department::create($validated);
return redirect()->route('admin.departments.index')
->with('success', 'Departemen baru berhasil ditambahkan.');
}
public function show(Department $department)
{
// Hanya melempar object $department ke view tanpa load relasi positions
return view('pages.admin.departments.show', compact('department'));
}
public function edit(Department $department)
{
return view('pages.admin.departments.edit', compact('department'));
}
public function update(Request $request, Department $department)
{
$validated = $request->validate([
'name' => 'required|string|max:255|unique:departments,name,' . $department->id,
'code' => 'nullable|string|max:50|unique:departments,code,' . $department->id,
]);
$department->update($validated);
return redirect()->route('admin.departments.index')
->with('success', 'Data Departemen berhasil diperbarui.');
}
public function exportPdf(Request $request)
{
// 1. Ambil data sesuai filter/search saat ini
$search = $request->search;
$departments = Department::when($search, function($q) use ($search) {
$q->where('name', 'like', "%{$search}%");
})->get();
// 2. Tangkap Metadata Siapa & Kapan
$metadata = [
'downloaded_by' => auth()->user()->first_name . ' ' . auth()->user()->last_name, // Mengambil nama admin yang login
'download_time' => now()->translatedFormat('l, d F Y - H:i:s'), // Format waktu Indonesia
'total_data' => $departments->count()
];
// 3. Render View ke PDF
$pdf = Pdf::loadView('pages.admin.departments.export-pdf', compact('departments', 'metadata'));
return $pdf->download('Data_Departemen_'.date('YmdHis').'.pdf');
}
public function destroy(Department $department)
{
// Opsional: Cek apakah ada posisi terkait sebelum menghapus
if ($department->positions()->count() > 0) {
return back()->with('error', 'Gagal menghapus: Departemen ini masih memiliki Posisi/Jabatan aktif.');
}
$department->delete();
return redirect()->route('admin.departments.index')
->with('success', 'Departemen berhasil dihapus.');
}
}