User::select('id', 'name', 'email', 'role', 'created_at') ->latest() ->get(), ]); } public function create() { // whereDoesntHave mencegah 1 employee memiliki lebih dari 1 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::create([ 'name' => $employee->name, 'email' => $validated['email'], 'password' => Hash::make('password'), 'role' => $validated['role'], 'employee_id' => $employee->id, ]); return redirect()->route('admin.users.index') ->with('success', "Akun untuk {$employee->name} berhasil dibuat. Password default: password"); } public function update(Request $request, User $user) { $validated = $request->validate([ 'role' => ['required', Rule::in(['admin', 'employee'])], ]); $user->update($validated); return back()->with('success', "Role {$user->name} berhasil diubah."); } }