emptyStats(); } $bid = $business->id; $listingsByStatus = Listing::where('business_id', $bid) ->selectRaw('status, COUNT(*) as count') ->groupBy('status') ->pluck('count', 'status') ->toArray(); $openDeals = 0; $dealsByType = []; $dealsByStatus = []; if (Schema::hasTable('aex_deals')) { $openDeals = Deal::where('business_id', $bid) ->whereNotIn('status', ['completed', 'cancelled']) ->count(); $dealsByType = Deal::where('business_id', $bid) ->selectRaw('deal_type, COUNT(*) as count') ->groupBy('deal_type') ->pluck('count', 'deal_type') ->toArray(); $dealsByStatus = Deal::where('business_id', $bid) ->selectRaw('status, COUNT(*) as count') ->groupBy('status') ->pluck('count', 'status') ->toArray(); } $commissionsPending = 0; $commissionsPendingAmount = 0; if (Schema::hasTable('aex_commissions')) { $commissionsPending = Commission::where('business_id', $bid) ->whereIn('status', ['pending', 'synced']) ->count(); $commissionsPendingAmount = (int) Commission::where('business_id', $bid) ->whereIn('status', ['pending', 'synced']) ->sum('amount'); } $inAppraisal = (int) ($listingsByStatus['under_review'] ?? 0) + (int) ($listingsByStatus['submitted'] ?? 0); $activeListings = (int) ($listingsByStatus['appraised'] ?? 0) + (int) ($listingsByStatus['in_deal'] ?? 0) + (int) ($listingsByStatus['submitted'] ?? 0) + (int) ($listingsByStatus['under_review'] ?? 0); return [ 'listings' => [ 'by_status' => $this->labelizeCounts($listingsByStatus, 'status'), 'active' => $activeListings, 'in_appraisal_pipeline' => $inAppraisal, 'appraised' => (int) ($listingsByStatus['appraised'] ?? 0), 'sold' => (int) ($listingsByStatus['sold'] ?? 0), ], 'deals' => [ 'open' => $openDeals, 'by_type' => $this->labelizeCounts($dealsByType, 'deal_type'), 'by_status' => $this->labelizeCounts($dealsByStatus, 'status'), ], 'commissions' => [ 'pending_count' => $commissionsPending, 'pending_amount' => $commissionsPendingAmount, 'pending_amount_formatted' => $this->aexUtil->formatMoney($commissionsPendingAmount), ], ]; } protected function labelizeCounts(array $counts, string $labelType): array { $result = []; foreach ($counts as $key => $count) { $label = match ($labelType) { 'status' => $this->aexUtil->statusLabel($key), 'deal_type' => $this->aexUtil->dealTypeLabel($key), default => $key, }; $result[] = [ 'key' => $key, 'label' => $label, 'count' => (int) $count, ]; } return $result; } protected function emptyStats(): array { return [ 'listings' => [ 'by_status' => [], 'active' => 0, 'in_appraisal_pipeline' => 0, 'appraised' => 0, 'sold' => 0, ], 'deals' => [ 'open' => 0, 'by_type' => [], 'by_status' => [], ], 'commissions' => [ 'pending_count' => 0, 'pending_amount' => 0, 'pending_amount_formatted' => $this->aexUtil->formatMoney(0), ], ]; } }