get(); // Ambil data santri yang belum memiliki akun $santris_tanpa_akun = Santri::whereDoesntHave('user')->get(); return view('admin.users.santri_accounts', compact('users', 'santris_tanpa_akun')); } /** * Tampilkan daftar akun Wali Santri. */ public function waliAccounts() { // Ambil akun user dengan role 'wali' $users = User::where('role', 'wali')->get(); // Asumsi: Wali tidak punya tabel biodata terpisah untuk langkah 3 ini, // jadi kita ambil dari data Santri. // Jika Wali memiliki tabel biodata Walis, kita bisa tambahkan logika Wali::whereDoesntHave('user') $walis = Wali::all(); return view('admin.users.wali_accounts', compact('users', 'walis')); } /** * Tampilkan form untuk membuat akun baru (digunakan untuk santri dan wali). */ public function createAccount(string $role) { if (!in_array($role, ['santri', 'wali'])) { abort(404); } $list_data = []; if ($role === 'santri') { // Ambil santri yang BELUM punya akun $list_data = Santri::whereDoesntHave('user')->get(); } elseif ($role === 'wali') { // Ambil semua data wali (kita asumsikan Wali adalah individu terpisah yang didata admin) $list_data = Wali::all(); } return view('admin.users.create_account', compact('role', 'list_data')); } /** * Simpan akun baru. */ public function storeAccount(Request $request, string $role) { if (!in_array($role, ['santri', 'wali'])) { abort(404); } // Validasi $validated = $request->validate([ 'role_id' => [ 'required', Rule::unique('users', 'role_id')->where(function ($query) use ($role) { return $query->where('role', $role); }) ], 'username' => 'required|string|max:255|unique:users,username', 'password' => 'required|string|min:8|confirmed', ], [ 'role_id.unique' => 'Akun untuk data ini sudah ada.', 'role_id.required' => 'Wajib memilih data Santri/Wali yang akan dibuatkan akun.', 'username.unique' => 'Username ini sudah digunakan.', ]); // Dapatkan nama berdasarkan role_id if ($role === 'santri') { $data_induk = Santri::where('id_santri', $request->role_id)->firstOrFail(); $name = $data_induk->nama_lengkap; } elseif ($role === 'wali') { $data_induk = Wali::where('id_wali', $request->role_id)->firstOrFail(); $name = $data_induk->nama_wali; } // Simpan User User::create([ 'name' => $name, 'username' => $validated['username'], 'password' => Hash::make($validated['password']), 'role' => $role, 'role_id' => $validated['role_id'], ]); return redirect()->route('admin.users.'.$role.'_accounts')->with('success', 'Akun '.$role.' berhasil dibuat.'); } // Tambahkan method edit/update/destroy untuk akun di langkah berikutnya }