MIF_E31220480/app/Http/Controllers/DashboardPemilikController.php

85 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Room;
use App\Models\Booking;
use App\Models\Transaksi;
use App\Models\Expense;
use App\Models\Finance;
class DashboardPemilikController extends Controller
{
public function index(Request $request)
{
// Hitung total customer, kamar, dan booking
$totalUsers = User::count();
$totalRooms = Room::count();
$totalBookings = Booking::count();
// Ambil total pemasukan dari tabel transaksi
$totalPemasukan = Transaksi::sum('jumlah_pembayaran');
// Ambil total pengeluaran dari tabel pengeluaran
$totalPengeluaran = Expense::sum('jumlah_pengeluaran');
// Hitung keuntungan (pemasukan - pengeluaran)
$totalKeuntungan = $totalPemasukan - $totalPengeluaran;
// Ambil daftar tahun unik dari tabel finance
$tahunList = Finance::selectRaw('YEAR(tanggal) as tahun')
->distinct()
->orderBy('tahun', 'asc')
->pluck('tahun')
->toArray();
// Ambil tahun dari request atau default ke tahun sekarang
$tahunTerpilih = $request->input('tahun', now()->year);
// Ambil data pemasukan dan pengeluaran per bulan berdasarkan tahun terpilih
$transactions = Finance::selectRaw('DATE_FORMAT(tanggal, "%Y-%m") as month,
SUM(pemasukan) as pemasukan,
SUM(pengeluaran) as pengeluaran')
->when($tahunTerpilih !== 'all', function ($query) use ($tahunTerpilih) {
$query->whereYear('tanggal', $tahunTerpilih);
})
->groupBy('month')
->orderBy('month')
->get();
// Memproses data untuk grafik
$labels = $transactions->pluck('month')->toArray();
$pemasukan = $transactions->pluck('pemasukan')->toArray();
$pengeluaran = $transactions->pluck('pengeluaran')->toArray();
$keuntungan = array_map(function ($p, $q) {
return $p - $q;
}, $pemasukan, $pengeluaran);
// Ambil data status kamar (tersedia, terisi, maintenance)
$data_kamar = [
'Terisi' => Room::where('status', 'terisi')->count(),
'Kosong' => Room::where('status', 'tersedia')->count(),
'Rusak' => Room::where('status', 'maintenance')->count(),
];
// Kirim semua data ke view
return view('pemilik.dashboard', compact(
'totalUsers',
'totalRooms',
'totalBookings',
'totalPemasukan',
'totalPengeluaran',
'totalKeuntungan',
'labels',
'pemasukan',
'pengeluaran',
'keuntungan',
'tahunList',
'tahunTerpilih',
'data_kamar'
));
}
}