MIF_E31220412/app/Http/Controllers/DashboardController.php

207 lines
7.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Barang;
use App\Models\Sewa;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
/**
* Menampilkan halaman dashboard
*
* @return \Illuminate\View\View
*/
public function index()
{
// Cek tipe pengguna yang sedang login
$userType = Auth::user()->tipe_pengguna;
// Data untuk dashboard
$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')->count()
];
// Data grafik per tahun
$yearlyStats = DB::table('sewas')
->select(
DB::raw('YEAR(created_at) as tahun'),
DB::raw('COUNT(*) as total_sewa'),
DB::raw('SUM(total_harga) 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
]
]
];
// Debug data
// dd($chartData, $userChartData);
// Data aktivitas
$aktivitas = [];
// Jika user adalah admin, tampilkan semua data
if ($userType === 'admin') {
// 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'])->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'
];
}
} else {
// Jika user adalah customer, hanya tampilkan data terbatas
$aktivitas[] = [
'type' => 'info',
'title' => 'Selamat Datang',
'description' => 'Anda login sebagai pengguna biasa. Anda hanya dapat melihat informasi.',
'time' => 'Saat ini',
'icon_color' => 'blue'
];
// Tampilkan riwayat sewa pengguna ini saja
$userSewa = Sewa::where('user_id', Auth::id())
->with('paket')
->latest()
->first();
if ($userSewa) {
$aktivitas[] = [
'type' => 'sewa',
'title' => 'Pesanan Terakhir Anda',
'description' => 'Paket: ' . $userSewa->paket->nama_paket,
'time' => Carbon::parse($userSewa->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');
}
}