105 lines
3.3 KiB
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'
|
|
));
|
|
}
|
|
}
|