tipe_pengguna; // Jika user adalah customer, redirect langsung ke halaman sewa if ($userType === 'user') { return redirect()->route('sewa.index'); } // Data untuk dashboard (hanya untuk admin) $stats = [ 'pengguna' => User::where('tipe_pengguna', 'user')->count(), 'admin' => User::where('tipe_pengguna', 'admin')->count(), 'total_pengguna' => User::count(), 'barang' => Barang::count(), 'sewa' => DB::table('sewas')->whereIn('status', ['disetujui', 'selesai'])->count() ]; // Data grafik per tahun $yearlyStats = DB::table('sewas') ->select( DB::raw('YEAR(created_at) as tahun'), DB::raw('COUNT(CASE WHEN status IN ("disetujui", "selesai") THEN 1 END) as total_sewa'), DB::raw('SUM(CASE WHEN status IN ("disetujui", "selesai") THEN total_harga ELSE 0 END) as total_pemasukan'), DB::raw('0 as total_pengeluaran') // Sementara set 0 karena belum ada kolom biaya_operasional ) ->groupBy('tahun') ->orderBy('tahun', 'ASC') ->get(); // Jika tidak ada data, tambahkan data dummy untuk tahun ini if ($yearlyStats->isEmpty()) { $yearlyStats = collect([ (object)[ 'tahun' => date('Y'), 'total_sewa' => 0, 'total_pemasukan' => 0, 'total_pengeluaran' => 0 ] ]); } // Data pertumbuhan pengguna per tahun $userGrowth = DB::table('users') ->select( DB::raw('YEAR(created_at) as tahun'), DB::raw('COUNT(*) as total_pengguna') ) ->groupBy('tahun') ->orderBy('tahun', 'ASC') ->get(); // Jika tidak ada data pengguna, tambahkan data dummy if ($userGrowth->isEmpty()) { $userGrowth = collect([ (object)[ 'tahun' => date('Y'), 'total_pengguna' => User::count() ] ]); } // Format data untuk grafik $chartData = [ 'labels' => $yearlyStats->pluck('tahun')->toArray(), 'datasets' => [ [ 'label' => 'Pemasukan', 'data' => $yearlyStats->pluck('total_pemasukan')->toArray(), 'backgroundColor' => 'rgba(34, 197, 94, 0.2)', 'borderColor' => 'rgb(34, 197, 94)', 'borderWidth' => 2, 'tension' => 0.4 ], [ 'label' => 'Pengeluaran', 'data' => $yearlyStats->pluck('total_pengeluaran')->toArray(), 'backgroundColor' => 'rgba(239, 68, 68, 0.2)', 'borderColor' => 'rgb(239, 68, 68)', 'borderWidth' => 2, 'tension' => 0.4 ], [ 'label' => 'Total Sewa', 'data' => $yearlyStats->pluck('total_sewa')->toArray(), 'backgroundColor' => 'rgba(59, 130, 246, 0.2)', 'borderColor' => 'rgb(59, 130, 246)', 'borderWidth' => 2, 'tension' => 0.4 ] ] ]; $userChartData = [ 'labels' => $userGrowth->pluck('tahun')->toArray(), 'datasets' => [ [ 'label' => 'Total Pengguna', 'data' => $userGrowth->pluck('total_pengguna')->toArray(), 'backgroundColor' => 'rgba(139, 92, 246, 0.2)', 'borderColor' => 'rgb(139, 92, 246)', 'borderWidth' => 2, 'tension' => 0.4, 'fill' => true ] ] ]; // Data aktivitas (hanya untuk admin) $aktivitas = []; // Ambil user terbaru yang mendaftar (baik admin maupun user) $latestUsers = User::latest()->take(5)->get(); foreach ($latestUsers as $user) { $aktivitas[] = [ 'type' => 'pengguna', 'title' => 'Pengguna ' . ucfirst($user->tipe_pengguna), 'description' => $user->nama . ' (' . $user->tipe_pengguna . ')', 'time' => Carbon::parse($user->created_at)->diffForHumans(), 'icon_color' => $user->tipe_pengguna === 'admin' ? 'indigo' : 'blue' ]; } // Tambahkan aktivitas sewa terbaru $latestSewa = Sewa::with(['user', 'paket']) ->whereIn('status', ['disetujui', 'selesai']) ->latest() ->first(); if ($latestSewa) { $aktivitas[] = [ 'type' => 'sewa', 'title' => 'Pemesanan Baru', 'description' => $latestSewa->user->nama . ' memesan paket ' . $latestSewa->paket->nama_paket, 'time' => Carbon::parse($latestSewa->created_at)->diffForHumans(), 'icon_color' => 'green' ]; } return view('dashboard', compact('stats', 'chartData', 'userChartData', 'aktivitas', 'userType')); } /** * Menampilkan halaman profile * * @return \Illuminate\View\View */ public function showProfile() { return view('profile'); } /** * Update profile (dummy) * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function updateProfile(Request $request) { // Proses update profile akan ditambahkan nanti return redirect()->back()->with('success', 'Profile berhasil diperbarui'); } }