108 lines
3.6 KiB
PHP
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.');
|
|
}
|
|
} |