> */ public function forManager(User $actor, ?string $origin = null): array { abort_unless(app(ScopedPortalAdministration::class)->interestOperator($actor), 403); $names = array_column(app(CountryCatalogue::class)->all(), 'name', 'code'); $groups = []; $interests=DB::table('interest_requests')->whereNull('deleted_at'); app(ScopedPortalAdministration::class)->interestQuery($interests,$actor); foreach ($interests->select('metadata')->cursor() as $row) { $metadata = json_decode($row->metadata ?? '{}', true); $code = $metadata['declared_origin_country_code'] ?? null; $key = is_string($code) && isset($names[$code]) ? $code : ''; $groups[$key] = ($groups[$key] ?? 0) + 1; } $desk = []; if ($actor->can('manage-portal') && Schema::hasTable('desk_requests')) { foreach (DB::table('desk_requests')->whereNotIn('status', ['draft', 'cancelled'])->select('payload')->cursor() as $row) { $code = app(VirtualDesk::class)->decode($row->payload)['declared_origin_country_code'] ?? null; $key = is_string($code) && isset($names[$code]) ? $code : ''; $desk[$key] = ($desk[$key] ?? 0) + 1; } } $businesses = []; if ($actor->can('manage-portal') && Schema::hasTable('existing_businesses')) { foreach (app(BusinessRepository::class)->query()->whereNotIn('status', ['draft', 'cancelled'])->cursor() as $business) { $code = $business->payload['declared_origin_country_code'] ?? null; $key = is_string($code) && isset($names[$code]) ? $code : ''; $businesses[$key] = ($businesses[$key] ?? 0) + 1; } } // Distinct request collections; summing them could count the same investor twice. if ($origin !== null && $origin !== '') { $key = $origin === 'unknown' ? '' : $origin; $groups = array_intersect_key($groups, [$key => true]); $desk = array_intersect_key($desk, [$key => true]); $businesses = array_intersect_key($businesses, [$key => true]); } return ['interests' => $this->format($groups, $names), 'desk' => $this->format($desk, $names), 'businesses' => $this->format($businesses, $names)]; } /** @param array $counts * @param array $names * @return list */ private function format(array $counts, array $names): array { ksort($counts); return array_map(fn (string $code, int $count) => ['code' => $code ?: null, 'name' => $names[$code] ?? 'Não informado', 'count' => $count], array_keys($counts), array_values($counts)); } }