123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <?php
-
- namespace App\Filament\Company\Resources\Sales\EstimateResource\Widgets;
-
- use App\Enums\Accounting\EstimateStatus;
- use App\Filament\Company\Resources\Sales\EstimateResource\Pages\ListEstimates;
- use App\Filament\Widgets\EnhancedStatsOverviewWidget;
- use App\Utilities\Currency\CurrencyAccessor;
- use App\Utilities\Currency\CurrencyConverter;
- use Filament\Widgets\Concerns\InteractsWithPageTable;
- use Illuminate\Support\Number;
-
- class EstimateOverview extends EnhancedStatsOverviewWidget
- {
- use InteractsWithPageTable;
-
- protected function getTablePage(): string
- {
- return ListEstimates::class;
- }
-
- protected function getStats(): array
- {
- $activeTab = $this->activeTab;
-
- if ($activeTab === 'draft') {
- $draftEstimates = $this->getPageTableQuery();
- $totalDraftCount = $draftEstimates->count();
- $totalDraftAmount = $draftEstimates->get()->sumMoneyInDefaultCurrency('total');
-
- $averageDraftTotal = $totalDraftCount > 0
- ? (int) round($totalDraftAmount / $totalDraftCount)
- : 0;
-
- return [
- EnhancedStatsOverviewWidget\EnhancedStat::make('Active Estimates', '-'),
- EnhancedStatsOverviewWidget\EnhancedStat::make('Accepted Estimates', '-'),
- EnhancedStatsOverviewWidget\EnhancedStat::make('Converted Estimates', '-'),
- EnhancedStatsOverviewWidget\EnhancedStat::make('Average Estimate Total', CurrencyConverter::formatCentsToMoney($averageDraftTotal))
- ->suffix(CurrencyAccessor::getDefaultCurrency()),
- ];
- }
-
- $activeEstimates = $this->getPageTableQuery()->active();
-
- $totalActiveCount = $activeEstimates->count();
- $totalActiveAmount = $activeEstimates->get()->sumMoneyInDefaultCurrency('total');
-
- $acceptedEstimates = $this->getPageTableQuery()
- ->where('status', EstimateStatus::Accepted);
-
- $totalAcceptedCount = $acceptedEstimates->count();
- $totalAcceptedAmount = $acceptedEstimates->get()->sumMoneyInDefaultCurrency('total');
-
- $convertedEstimates = $this->getPageTableQuery()
- ->where('status', EstimateStatus::Converted);
-
- $totalConvertedCount = $convertedEstimates->count();
-
- $validEstimates = $this->getPageTableQuery()
- ->whereNotIn('status', [
- EstimateStatus::Draft,
- ]);
-
- $totalValidEstimatesCount = $validEstimates->count();
- $totalValidEstimateAmount = $validEstimates->get()->sumMoneyInDefaultCurrency('total');
-
- $averageEstimateTotal = $totalValidEstimatesCount > 0
- ? (int) round($totalValidEstimateAmount / $totalValidEstimatesCount)
- : 0;
-
- $percentConverted = '-';
- $percentConvertedSuffix = null;
- $percentConvertedDescription = null;
-
- if ($activeTab !== 'active') {
- $percentConverted = $totalValidEstimatesCount > 0
- ? Number::percentage(($totalConvertedCount / $totalValidEstimatesCount) * 100, maxPrecision: 1)
- : Number::percentage(0, maxPrecision: 1);
-
- $percentConvertedSuffix = 'converted';
- $percentConvertedDescription = $totalConvertedCount . ' converted';
- }
-
- return [
- EnhancedStatsOverviewWidget\EnhancedStat::make('Active Estimates', CurrencyConverter::formatCentsToMoney($totalActiveAmount))
- ->suffix(CurrencyAccessor::getDefaultCurrency())
- ->description($totalActiveCount . ' active estimates'),
-
- EnhancedStatsOverviewWidget\EnhancedStat::make('Accepted Estimates', CurrencyConverter::formatCentsToMoney($totalAcceptedAmount))
- ->suffix(CurrencyAccessor::getDefaultCurrency())
- ->description($totalAcceptedCount . ' accepted'),
-
- EnhancedStatsOverviewWidget\EnhancedStat::make('Converted Estimates', $percentConverted)
- ->suffix($percentConvertedSuffix)
- ->description($percentConvertedDescription),
-
- EnhancedStatsOverviewWidget\EnhancedStat::make('Average Estimate Total', CurrencyConverter::formatCentsToMoney($averageEstimateTotal))
- ->suffix(CurrencyAccessor::getDefaultCurrency())
- ->description($activeTab === 'all' ? 'Excludes draft estimates' : null),
- ];
- }
- }
|