NIM_E31222518/app/Http/Controllers/Admin/DashboardController.php

105 lines
3.3 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Barang;
use App\Models\Pesanan;
use App\Models\Transaksi;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware(\App\Http\Middleware\CheckRole::class . ':admin');
}
public function index()
{
// Statistik Dasar
$totalPengguna = User::count();
$totalBarang = Barang::count();
$totalPesanan = Pesanan::count();
$totalPendapatan = Transaksi::where('status', 'dibayar')
->sum('total_pembayaran');
// Pesanan Terbaru
$pesananTerbaru = Pesanan::with('user')
->latest()
->take(5)
->get();
// Produk Terlaris
$produkTerlaris = Barang::select('barang.*', DB::raw('COUNT(pesanan.id) as total_terjual'))
->leftJoin('pesanan', 'barang.id', '=', 'pesanan.barang_id')
->where(function ($query) {
$query->whereNull('pesanan.status')
->orWhere('pesanan.status', '!=', 'cancelled');
})
->groupBy('barang.id')
->orderBy('total_terjual', 'desc')
->take(5)
->get();
// Data aktivitas
$aktivitasTerbaru = collect();
// Aktivitas pesanan terbaru
$pesananAktivitas = Pesanan::with('user')
->latest()
->take(3)
->get()
->map(function ($pesanan) {
return (object)[
'type' => 'order',
'description' => "Pesanan baru #{$pesanan->id} dari {$pesanan->user->nama}",
'created_at' => $pesanan->created_at
];
});
// Aktivitas transaksi terbaru
$transaksiAktivitas = Transaksi::with('user')
->latest()
->take(3)
->get()
->map(function ($transaksi) {
return (object)[
'type' => 'payment',
'description' => "Pembayaran sebesar Rp " . number_format($transaksi->total_pembayaran, 0, ',', '.') . " dari {$transaksi->user->nama}",
'created_at' => $transaksi->created_at
];
});
// Aktivitas user terbaru
$userAktivitas = User::latest()
->take(3)
->get()
->map(function ($user) {
return (object)[
'type' => 'user',
'description' => "Pengguna baru terdaftar: {$user->nama}",
'created_at' => $user->created_at
];
});
// Gabungkan semua aktivitas
$aktivitasTerbaru = $pesananAktivitas->concat($transaksiAktivitas)
->concat($userAktivitas)
->sortByDesc('created_at')
->take(5);
return view('admin.dashboard', compact(
'totalPengguna',
'totalBarang',
'totalPesanan',
'totalPendapatan',
'pesananTerbaru',
'produkTerlaris',
'aktivitasTerbaru'
));
}
}