95 lines
2.9 KiB
PHP
95 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Position;
|
|
use App\Models\Department;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PositionController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = \App\Models\Position::query();
|
|
|
|
// Logika pencarian (jika ada input search)
|
|
if ($request->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.');
|
|
}
|
|
} |