85 lines
2.8 KiB
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'
|
|
));
|
|
}
|
|
}
|