@php use App\Enums\QuestionBatteryStatus; use App\Services\QuestionBatteryScopeService; /** @var \App\Data\UserPortalBatteryDiagnostic $batteryDiagnostic */ $scopeService = app(QuestionBatteryScopeService::class); $formatBatteryScope = static function ($battery) use ($scopeService): string { $battery->loadMissing(['sectors', 'trainingGroups', 'sector', 'trainingGroup']); $areas = $scopeService->sectorIdsForBattery($battery); $groups = $scopeService->trainingGroupIdsForBattery($battery); $areaNames = $battery->sectors->pluck('name')->all(); if ($areaNames === [] && $battery->sector) { $areaNames = [$battery->sector->name]; } $groupNames = $battery->trainingGroups->pluck('name')->all(); if ($groupNames === [] && $battery->trainingGroup) { $groupNames = [$battery->trainingGroup->name]; } $areaLabel = $areaNames !== [] ? implode(', ', $areaNames) : '—'; $groupLabel = $groupNames !== [] ? implode(', ', $groupNames) : '—'; return "{$areaLabel} · {$groupLabel}"; }; @endphp

Bateria de perguntas no portal

A visibilidade depende da combinação área + grupo do utilizador com o escopo da bateria publicada.

@if(\Illuminate\Support\Facades\Route::has('users.portal-preview')) Ver como utilizador @endif
@if($batteryDiagnostic->userSeesBattery())
Enxerga bateria: {{ $batteryDiagnostic->visibleBattery?->title }} ({{ $formatBatteryScope($batteryDiagnostic->visibleBattery) }})
@elseif($batteryDiagnostic->unavailableReason === 'error')
Não foi possível carregar o diagnóstico da bateria neste momento. O formulário do utilizador continua disponível acima. Atualize o deploy e execute php artisan route:cache se o problema persistir.
@elseif($batteryDiagnostic->missingProfileScope())
O utilizador não tem área e/ou grupo definidos — por isso o portal mostra o aviso de perfil incompleto.
@else
Não há bateria publicada e disponível para o escopo atual do utilizador (mensagem igual à do portal).
@endif @if($batteryDiagnostic->scopeRows !== [])

Combinações área + grupo do utilizador

@foreach($batteryDiagnostic->scopeRows as $row) @endforeach
Área Grupo Bateria visível Diagnóstico
{{ $row->sectorName }} {{ $row->trainingGroupName }} @if($row->isVisible()) {{ $row->publishedBattery?->title }} @else @endif @if($row->isVisible()) Publicada e dentro da janela de datas. @else {{ $row->blockReasonLabel() }} @if($row->latestMatchingBattery && \Illuminate\Support\Facades\Route::has('training.question-batteries.show')) Ver bateria #{{ $row->latestMatchingBattery->id }} ({{ QuestionBatteryStatus::tryFrom((string) $row->latestMatchingBattery->status)?->label() ?? $row->latestMatchingBattery->status }}) @endif @endif
@endif @if(\Illuminate\Support\Facades\Route::has('users.align-battery-scope'))

Alinhar escopo com uma bateria

Se o utilizador estiver na área/grupo errados, selecione a bateria desejada para copiar o escopo dela para este utilizador.

@csrf
Aplicar escopo da bateria
@endif