MIF_E31222881/app/Http/Controllers/HomeController.php

66 lines
2.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\Models\User;
use App\Models\Wallet;
use App\Models\DetailPayment;
class HomeController extends Controller
{
public function index()
{
$now = Carbon::now();
$month = $now->month;
$year = $now->year;
$monthlyIncome = DetailPayment::where('status', 'paid')
->where('payment_month', $month)
->where('payment_year', $year)
->whereHas('payments', fn($q) => $q->where('payment_status', 'success'))
->sum(DB::raw('IFNULL(amount,0) + IFNULL(penalty,0)'));
$studentCount = User::where('level', 2)
->where('status_santri', 'aktif')
->count();
$totalBalance = Wallet::sum('saldo');
$paymentTrend = DetailPayment::select('payment_month', 'payment_year')
->selectRaw('SUM(IFNULL(amount,0) + IFNULL(penalty,0)) as total')
->where('status', 'paid')
->whereHas('payments', fn($q) => $q->where('payment_status', 'success'))
->whereBetween(DB::raw("STR_TO_DATE(CONCAT(payment_year,'-',payment_month,'-01'), '%Y-%m-%d')"), [
now()->subMonths(11)->startOfMonth()->toDateString(),
now()->endOfMonth()->toDateString(),
])
->groupBy('payment_year', 'payment_month')
->orderBy('payment_year')
->orderBy('payment_month')
->get();
$labels = [];
$data = [];
foreach ($paymentTrend as $pt) {
$labels[] = Carbon::createFromDate($pt->payment_year, $pt->payment_month, 1)->format('M Y');
$data[] = (int)$pt->total;
}
return Inertia()->render('Dashboard', [
'monthlyIncome' => $monthlyIncome,
'studentCount' => $studentCount,
'totalBalance' => $totalBalance,
'paymentTrend' => [
'labels' => $labels,
'data' => $data,
],
]);
}
}