Files
usher-manage-stack/app/Http/Controllers/AdminDashboardController.php
2025-11-20 23:21:05 +08:00

77 lines
2.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Member;
use App\Models\MembershipPayment;
use App\Models\FinanceDocument;
use Illuminate\Http\Request;
class AdminDashboardController extends Controller
{
public function index()
{
// Member statistics
$totalMembers = Member::count();
$activeMembers = Member::whereDate('membership_expires_at', '>=', now()->toDateString())->count();
$expiredMembers = Member::where(function ($q) {
$q->whereNull('membership_expires_at')
->orWhereDate('membership_expires_at', '<', now()->toDateString());
})->count();
$expiringSoon = Member::whereBetween('membership_expires_at', [
now()->toDateString(),
now()->addDays(30)->toDateString()
])->count();
// Payment statistics
$totalPayments = MembershipPayment::count();
$totalRevenue = MembershipPayment::sum('amount') ?? 0;
$recentPayments = MembershipPayment::with('member')
->orderByDesc('paid_at')
->limit(5)
->get();
$paymentsThisMonth = MembershipPayment::whereYear('paid_at', now()->year)
->whereMonth('paid_at', now()->month)
->count();
$revenueThisMonth = MembershipPayment::whereYear('paid_at', now()->year)
->whereMonth('paid_at', now()->month)
->sum('amount') ?? 0;
// Finance document statistics
$pendingApprovals = FinanceDocument::where('status', '!=', FinanceDocument::STATUS_APPROVED_CHAIR)
->where('status', '!=', FinanceDocument::STATUS_REJECTED)
->count();
$fullyApprovedDocs = FinanceDocument::where('status', FinanceDocument::STATUS_APPROVED_CHAIR)->count();
$rejectedDocs = FinanceDocument::where('status', FinanceDocument::STATUS_REJECTED)->count();
// Documents pending user's approval
$user = auth()->user();
$myPendingApprovals = 0;
if ($user->hasRole('cashier')) {
$myPendingApprovals += FinanceDocument::where('status', FinanceDocument::STATUS_PENDING)->count();
}
if ($user->hasRole('accountant')) {
$myPendingApprovals += FinanceDocument::where('status', FinanceDocument::STATUS_APPROVED_CASHIER)->count();
}
if ($user->hasRole('chair')) {
$myPendingApprovals += FinanceDocument::where('status', FinanceDocument::STATUS_APPROVED_ACCOUNTANT)->count();
}
return view('admin.dashboard.index', compact(
'totalMembers',
'activeMembers',
'expiredMembers',
'expiringSoon',
'totalPayments',
'totalRevenue',
'recentPayments',
'paymentsThisMonth',
'revenueThisMonth',
'pendingApprovals',
'fullyApprovedDocs',
'rejectedDocs',
'myPendingApprovals'
));
}
}