has('search')) { $search = $request->search; $query->where('name', 'like', "%{$search}%"); } // Ambil data tanpa memuat relasi 'department' $positions = $query->latest()->paginate(10); return view('pages.admin.positions.index', compact('positions')); } public function create() { $departments = Department::orderBy('name', 'asc')->get(); return view('pages.admin.positions.create', compact('departments')); } public function store(Request $request) { $validated = $request->validate([ 'department_id' => 'required|exists:departments,id', 'name' => 'required|string|max:255', ]); Position::create($validated); return redirect()->route('admin.positions.index') ->with('success', 'Posisi/Jabatan baru berhasil ditambahkan.'); } public function show(Position $position) { // Hanya melempar object $department ke view tanpa load relasi positions return view('pages.admin.positions.show', compact('position')); } public function edit(Position $position) { $departments = Department::orderBy('name', 'asc')->get(); return view('pages.admin.positions.edit', compact('position', 'departments')); } public function update(Request $request, Position $position) { $validated = $request->validate([ 'department_id' => 'required|exists:departments,id', 'name' => 'required|string|max:255', ]); $position->update($validated); return redirect()->route('admin.positions.index') ->with('success', 'Data Posisi berhasil diperbarui.'); } // Tambahkan ini di bagian fungsi-fungsi paling bawah public function exportExcel() { $fileName = 'Master_Data_Jabatan_' . date('Ymd_Hi') . '.xlsx'; return \Maatwebsite\Excel\Facades\Excel::download(new \App\Exports\PositionsExport, $fileName); } public function exportPdf() { $positions = \App\Models\Position::all(); $pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView('pages.admin.positions.export-pdf', compact('positions')) ->setPaper('a4', 'portrait'); return $pdf->download('Master_Data_Jabatan_' . date('Ymd_Hi') . '.pdf'); } public function destroy(Position $position) { $position->delete(); return redirect()->route('admin.positions.index') ->with('success', 'Posisi berhasil dihapus.'); } }