search) { $query->where(function ($q) use ($request) { $q->where('name', 'like', '%' . $request->search . '%') ->orWhere('email', 'like', '%' . $request->search . '%'); }); } if ($request->role) { $query->where('role', $request->role); } return Inertia::render('admin/users/index', [ 'users' => $query->latest()->get(), 'filters' => $request->only(['search', 'role']), ]); } public function create() { // Filter employee tanpa akun $employees = Employee::whereDoesntHave('user') ->orderBy('name') ->get() ->map(fn($e) => [ 'id' => $e->id, 'name' => $e->name, 'nip' => $e->nip, 'position' => $e->position?->name ?? '-', ]); return Inertia::render('admin/users/create', [ 'employees' => $employees, ]); } public function store(Request $request) { $validated = $request->validate([ 'employee_id' => [ 'required', 'exists:employees,id', 'unique:users,employee_id', ], 'email' => 'required|email|max:255|unique:users,email', 'role' => ['required', Rule::in(['admin', 'employee'])], ], [ 'employee_id.required' => 'Karyawan wajib dipilih.', 'employee_id.exists' => 'Karyawan tidak ditemukan.', 'employee_id.unique' => 'Karyawan ini sudah memiliki akun.', 'email.required' => 'Email wajib diisi.', 'email.email' => 'Format email tidak valid.', 'email.unique' => 'Email sudah terdaftar.', 'role.required' => 'Role wajib dipilih.', 'role.in' => 'Role hanya boleh admin atau employee.', ]); $employee = Employee::findOrFail($validated['employee_id']); $user = User::create([ 'name' => $employee->name, 'email' => $validated['email'], 'password' => Hash::make('password'), 'role' => $validated['role'], 'employee_id' => $employee->id, ]); $employee->update(['user_id' => $user->id]); return redirect()->route('admin.users.index') ->with('success', "Akun untuk {$employee->name} berhasil dibuat."); } public function update(Request $request, User $user) { $validated = $request->validate([ 'role' => ['required', Rule::in(['admin', 'employee'])], ], [ 'role.required' => 'Role wajib dipilih.', 'role.in' => 'Role hanya boleh admin atau employee.', ]); $user->update($validated); return back()->with('success', "Role {$user->name} berhasil diubah."); } }