subMonth(); $today = Carbon::today(); // Fungsi pembantu untuk hitung pertumbuhan (%) $getGrowth = function ($current, $previous) { if ($previous <= 0) return $current > 0 ? 100 : 0; return round((($current - $previous) / $previous) * 100, 1); }; // --- 1. HITUNG DATA BULAN INI --- $currPendapatan = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->sum('total_bayar') + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->sum('total_bayar'); $currMasuk = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count() + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count(); $currSelesai = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->count() + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->count(); $currBatal = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'ditolak')->count() + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'ditolak')->count(); // --- 2. HITUNG DATA BULAN LALU (Untuk Perbandingan %) --- $prevPendapatan = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->sum('total_bayar') + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->sum('total_bayar'); $prevMasuk = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count() + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count(); $prevSelesai = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->count() + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->count(); $prevBatal = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'ditolak')->count() + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'ditolak')->count(); // --- 3. SUSUN ARRAY STATISTIK --- $stat = [ 'pendapatan' => $currPendapatan, 'pendapatan_grow' => $getGrowth($currPendapatan, $prevPendapatan), 'masuk_count' => $currMasuk, 'masuk_grow' => $getGrowth($currMasuk, $prevMasuk), 'selesai_count' => $currSelesai, 'selesai_grow' => $getGrowth($currSelesai, $prevSelesai), 'batal_count' => $currBatal, 'batal_grow' => $getGrowth($currBatal, $prevBatal), ]; // --- 4. JADWAL & PENDING (Sudah Benar) --- $buketToday = TransaksiBuket::with(['pelanggan', 'buket'])->whereDate('tgl_ambil', $today)->where('status_transaksi', 'diterima')->get(); $fotoToday = BookingFoto::with(['pelanggan', 'paketFoto'])->whereDate('tgl_booking', $today)->where('status_booking', 'diterima')->orderBy('jam_mulai', 'asc')->get(); $riwayatBuket = TransaksiBuket::with(['pelanggan', 'buket'])->where('status_transaksi', 'menunggu_verifikasi')->latest()->get(); $riwayatFoto = BookingFoto::with(['pelanggan', 'paketFoto'])->where('status_booking', 'menunggu_verifikasi')->latest()->get(); return view('admin.beranda.index', compact('stat', 'buketToday', 'fotoToday', 'riwayatBuket', 'riwayatFoto')); } }