MIF_E31232103/app/Http/Controllers/AdminRental/DashboardController.php

77 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\AdminRental;
use App\Http\Controllers\Controller;
use App\Models\Booking;
use App\Models\Vehicle;
use Carbon\Carbon;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class DashboardController extends Controller
{
public function index(): View|RedirectResponse
{
$user = Auth::user();
$rentalCompany = $user?->rentalCompany;
// Guard against manually-created admin accounts that are not linked to a rental company yet.
if (!$rentalCompany) {
return redirect()
->route('home')
->with('warning', 'Akun admin rental belum terhubung ke data rental company. Silakan daftar rental terlebih dahulu.');
}
$rentalId = (int) $rentalCompany->id;
$totalVehicles = Vehicle::query()
->where('rental_company_id', $rentalId)
->count();
$activeBookings = Booking::query()
->where('rental_company_id', $rentalId)
->whereIn('booking_status', [
Booking::BOOKING_CONFIRMED,
Booking::BOOKING_ONGOING,
])
->count();
$totalCustomers = Booking::query()
->where('rental_company_id', $rentalId)
->distinct('customer_id')
->count('customer_id');
$startOfMonth = Carbon::now()->startOfMonth();
$endOfMonth = Carbon::now()->endOfMonth();
$verifiedRevenueThisMonth = (float) Booking::query()
->where('rental_company_id', $rentalId)
->where('payment_status', Booking::PAYMENT_VERIFIED)
->whereBetween('created_at', [$startOfMonth, $endOfMonth])
->sum('total_amount');
$paymentsWaitingVerification = Booking::query()
->where('rental_company_id', $rentalId)
->where('payment_status', Booking::PAYMENT_UPLOADED)
->count();
$bookingsToday = Booking::query()
->where('rental_company_id', $rentalId)
->whereDate('created_at', Carbon::today())
->count();
$summary = [
['label' => 'Total Kendaraan', 'value' => number_format($totalVehicles, 0, ',', '.')],
['label' => 'Booking Aktif', 'value' => number_format($activeBookings, 0, ',', '.')],
['label' => 'Customer', 'value' => number_format($totalCustomers, 0, ',', '.')],
['label' => 'Pendapatan Verified Bulan Ini', 'value' => 'Rp ' . number_format($verifiedRevenueThisMonth, 0, ',', '.')],
['label' => 'Payment Menunggu Verifikasi', 'value' => number_format($paymentsWaitingVerification, 0, ',', '.')],
['label' => 'Booking Hari Ini', 'value' => number_format($bookingsToday, 0, ',', '.')],
];
return view('admin-rental.dashboard', compact('summary'));
}
}