47 lines
1.7 KiB
PHP
47 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Widgets;
|
|
|
|
use App\Models\Contract;
|
|
use App\Models\PaymentScheduleItem;
|
|
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
|
|
use Filament\Widgets\StatsOverviewWidget\Stat;
|
|
|
|
class ContractStatsOverview extends BaseWidget
|
|
{
|
|
protected function getStats(): array
|
|
{
|
|
$totalRevenue = (float) Contract::sum('total_value');
|
|
$totalPaid = (float) Contract::sum('paid_amount');
|
|
$totalRemaining = (float) Contract::sum('remaining_amount');
|
|
$activeContracts = Contract::where('status', 'Đang hiệu lực')->count();
|
|
$upcomingPayments = PaymentScheduleItem::whereNull('schedule_id')
|
|
->orWhereHas('schedule', fn ($q) => $q->whereHas('contract'))
|
|
->whereDate('due_date', '<=', now()->addDays(30))
|
|
->whereDate('due_date', '>=', now())
|
|
->count();
|
|
|
|
return [
|
|
Stat::make('Tổng doanh thu', number_format($totalRevenue) . ' VNĐ')
|
|
->description('Tổng giá trị tất cả HĐ')
|
|
->color('primary'),
|
|
|
|
Stat::make('Đã thu', number_format($totalPaid) . ' VNĐ')
|
|
->description('Tổng tiền đã thanh toán')
|
|
->color('success'),
|
|
|
|
Stat::make('Công nợ phải thu', number_format($totalRemaining) . ' VNĐ')
|
|
->description('Tổng tiền chưa thu')
|
|
->color('danger'),
|
|
|
|
Stat::make('HĐ hiệu lực', $activeContracts)
|
|
->description('Số hợp đồng đang hiệu lực')
|
|
->color('warning'),
|
|
|
|
Stat::make('Đợt TT sắp đến hạn', $upcomingPayments)
|
|
->description('Trong 30 ngày tới')
|
|
->color('info'),
|
|
];
|
|
}
|
|
}
|