project-management/app/Http/Controllers/AdminController.php
2022-07-09 22:12:58 +08:00

65 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Payment;
use Carbon\Carbon;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function index()
{
return view('home');
}
private function groupAndSumPaymentsByYear($payments)
{
return $payments->groupBy(function($payment){
/** @var Payment $payment */
return $payment->created_at->month;
})->map(function($payments){
return $payments->sum('amount');
});
}
public function reports(Request $request)
{
$clientId = $request->get('client_id');
$today = Carbon::today();
$paymentQuery = Payment::whereBetween(
'created_at',
[$today->startOfYear()->toDateTimeString(), $today->endOfYear()->toDateTimeString()]
);
if($clientId) {
$paymentQuery->whereHas('project', function($query) use ($clientId) {
return $query->where('client_id', '=', $clientId);
});
}
$paymentsInThisYear = $paymentQuery->get();
$thisYearPaymentGroup = $this->groupAndSumPaymentsByYear($paymentsInThisYear);
$lastYearToday = $today->clone()->modify('-1 year');
$paymentsInLastYear = Payment::whereBetween(
'created_at',
[$lastYearToday->startOfYear()->toDateTimeString(), $lastYearToday->endOfYear()->toDateTimeString()]
)->get();
$lastYearPaymentGroup = $this->groupAndSumPaymentsByYear($paymentsInLastYear);
$data = [
'thisYearPaymentGroup' => [
'values' => $thisYearPaymentGroup->toArray(),
'year' => $today->year,
'sum' => $thisYearPaymentGroup->sum(),
],
'lastYearPaymentGroup' => [
'values' => $lastYearPaymentGroup->toArray(),
'year' => $lastYearToday->year,
'sum' => $lastYearPaymentGroup->sum(),
],
];
return view('reports', ['data' => $data]);
}
}