activeTab; if ($activeTab === 'draft') { $draftInvoices = $this->getPageTableQuery(); $totalDraftCount = $draftInvoices->count(); $totalDraftAmount = $draftInvoices->get()->sumMoneyInDefaultCurrency('total'); $averageDraftTotal = $totalDraftCount > 0 ? (int) round($totalDraftAmount / $totalDraftCount) : 0; return [ EnhancedStatsOverviewWidget\EnhancedStat::make('Total Unpaid', '-'), EnhancedStatsOverviewWidget\EnhancedStat::make('Due Within 30 Days', '-'), EnhancedStatsOverviewWidget\EnhancedStat::make('Average Payment Time', '-'), EnhancedStatsOverviewWidget\EnhancedStat::make('Average Invoice Total', CurrencyConverter::formatCentsToMoney($averageDraftTotal)) ->suffix(CurrencyAccessor::getDefaultCurrency()) ->description($totalDraftCount . ' draft invoices'), ]; } $unpaidInvoices = $this->getPageTableQuery()->unpaid(); $amountUnpaid = $unpaidInvoices->get()->sumMoneyInDefaultCurrency('amount_due'); $amountOverdue = $unpaidInvoices ->clone() ->where('status', InvoiceStatus::Overdue) ->get() ->sumMoneyInDefaultCurrency('amount_due'); $amountDueWithin30Days = $unpaidInvoices ->clone() ->whereBetween('due_date', [today(), today()->addMonth()]) ->get() ->sumMoneyInDefaultCurrency('amount_due'); $validInvoices = $this->getPageTableQuery() ->whereNotIn('status', [ InvoiceStatus::Void, InvoiceStatus::Draft, ]); $totalValidInvoiceAmount = $validInvoices->get()->sumMoneyInDefaultCurrency('total'); $totalValidInvoiceCount = $validInvoices->count(); $averageInvoiceTotal = $totalValidInvoiceCount > 0 ? (int) round($totalValidInvoiceAmount / $totalValidInvoiceCount) : 0; $averagePaymentTimeFormatted = '-'; $averagePaymentTimeSuffix = null; if ($activeTab !== 'unpaid') { $averagePaymentTime = $this->getPageTableQuery() ->whereNotNull('paid_at') ->selectRaw('AVG(TIMESTAMPDIFF(DAY, approved_at, paid_at)) as avg_days') ->value('avg_days'); $averagePaymentTimeFormatted = Number::format($averagePaymentTime ?? 0, maxPrecision: 1); $averagePaymentTimeSuffix = 'days'; } return [ EnhancedStatsOverviewWidget\EnhancedStat::make('Total Unpaid', CurrencyConverter::formatCentsToMoney($amountUnpaid)) ->suffix(CurrencyAccessor::getDefaultCurrency()) ->description('Includes ' . CurrencyConverter::formatCentsToMoney($amountOverdue) . ' overdue'), EnhancedStatsOverviewWidget\EnhancedStat::make('Due Within 30 Days', CurrencyConverter::formatCentsToMoney($amountDueWithin30Days)) ->suffix(CurrencyAccessor::getDefaultCurrency()), EnhancedStatsOverviewWidget\EnhancedStat::make('Average Payment Time', $averagePaymentTimeFormatted) ->suffix($averagePaymentTimeSuffix), EnhancedStatsOverviewWidget\EnhancedStat::make('Average Invoice Total', CurrencyConverter::formatCentsToMoney($averageInvoiceTotal)) ->suffix(CurrencyAccessor::getDefaultCurrency()), ]; } }