@include('components.buttons._headLineButtonsBackAdd', [
'headLine' => "
" . __('Dashboard - Gerenciador de Demandas'),
'routeBack' => 'admin.demandas.index',
'routeBackParams' => [],
'nameBack' => __('Quadro'),
'permission' => 'GERENCIADOR_DEMANDAS',
'tabs' => [
[
'route' => 'admin.demandas.relatorio.index',
'label' => 'Relatório',
'class' => 'fa-file-chart-column',
],
],
])
@include('errors.messageFlash')
{{-- ── STAT CARDS (sempre visíveis) ───────────────────────────────── --}}
@php
$statCards = [
['label' => 'Total', 'value' => $resumo['total'], 'color' => 'primary', 'icon' => 'fa-clipboard-list'],
['label' => 'Em Andamento', 'value' => $resumo['em_andamento'], 'color' => 'info', 'icon' => 'fa-spinner'],
['label' => 'Pendentes', 'value' => $resumo['pendente'], 'color' => 'warning', 'icon' => 'fa-clock'],
['label' => 'Atendidas', 'value' => $resumo['atendido'], 'color' => 'success', 'icon' => 'fa-circle-check'],
['label' => 'Canceladas', 'value' => $resumo['cancelado'], 'color' => 'secondary', 'icon' => 'fa-ban'],
];
@endphp
@foreach ($statCards as $card)
{{ $card['value'] }}
{{ __($card['label']) }}
@endforeach
@if ($isSecretario)
{{-- ════════════════════════════════════════════════════════════════ --}}
{{-- VISÃO SECRETÁRIO --}}
{{-- ════════════════════════════════════════════════════════════════ --}}
{{-- Linha 1: Tendência | Por Responsável | Por Canal ──────────── --}}
{{-- Tendência Mensal --}}
{{ __('Tendência Mensal') }}
{{ __('Demandas abertas nos últimos 6 meses') }}
{{ $tendencia['qtd_atual'] }}
{{ __('este mês') }}
@if ($tendencia['variacao'] !== null)
{{ $tendencia['variacao'] >= 0 ? '+' : '' }}{{ $tendencia['variacao'] }}%
{{ __('vs. mês anterior') }}
@else
-
{{ __('vs. mês anterior') }}
@endif
{{-- Por Responsável --}}
{{ __('Por Responsável') }}
{{ __('Quem está atendendo mais demandas') }}
@if ($porResponsavel->isEmpty())
{{ __('Nenhum responsável encontrado.') }}
@else
@php $maxResp = $porResponsavel->max('total') ?: 1; @endphp
@foreach ($porResponsavel as $i => $resp)
@php
$cores = ['primary','success','warning','info','danger'];
$cor = $cores[$i % 5];
$ini = collect(explode(' ', $resp['nome']))->map(fn($p) => strtoupper($p[0] ?? ''))->take(2)->join('');
$pct = round(($resp['total'] / $maxResp) * 100);
@endphp
{{ $ini }}
{{ $resp['nome'] }}
{{ $resp['total'] }}
@endforeach
{{ __('Mais ativo:') }} {{ $porResponsavel->first()['nome'] }}
@endif
{{-- Por Canal --}}
{{ __('Por Canal de Entrada') }}
{{ __('De onde vêm as demandas') }}
@if ($porCanal->isEmpty())
{{ __('Nenhum canal registrado.') }}
@else
@foreach ($porCanal as $c)
@php $cor = $canalCores[$c['chave']] ?? '#adb5bd'; @endphp
{{ $c['canal'] }}
{{ $c['total'] }}
@endforeach
@endif
{{-- Linha 2: Por Unidade | Tempo Médio ───────────────────────── --}}
{{-- Por Unidade --}}
{{ __('Abertas por Unidade') }}
{{ __('Demandas pendentes e em andamento por setor') }}
@if ($porUnidade->isEmpty())
{{ __('Nenhuma demanda aberta no momento.') }}
@else
@endif
{{-- Tempo Médio --}}
{{ __('Tempo Médio de Atendimento') }}
{{ __('Dias para resolver, por prioridade') }}
@php $maxTempo = collect($tempoMedio)->except('geral')->filter()->max() ?: 1; @endphp
@foreach ($prioConfig as $key => $cfg)
@php $val = $tempoMedio[$key]; @endphp
{{ __($cfg['label']) }}
@if ($val !== null)
@endif
{{ $val !== null ? $val . 'd' : '-' }}
@endforeach
@if ($tempoMedio['geral'] !== null)
{{ __('Média geral:') }}
{{ $tempoMedio['geral'] }} {{ __('dias') }}
@else
{{ __('Sem demandas atendidas ainda.') }}
@endif
@else
{{-- ════════════════════════════════════════════════════════════════ --}}
{{-- VISÃO USUÁRIO COMUM --}}
{{-- ════════════════════════════════════════════════════════════════ --}}
{{-- Linha 1: Ação Requerida | Abertas por Prioridade ───────────── --}}
{{-- Ação Requerida --}}
{{ __('Ação Requerida') }}
{{ __('Itens que dependem de você agora') }}
{{-- Aguardando aceite --}}
{{-- Encaminhadas para mim --}}
@if ($acaoRequerida['total'] === 0)
{{ __('Tudo em dia! Nenhum item aguardando sua ação.') }}
@else
{{ $acaoRequerida['total'] }}
{{ __('item(ns) aguardando sua ação') }}
@endif
{{-- Abertas por Prioridade --}}
{{ __('Abertas por Prioridade') }}
{{ __('Demandas pendentes e em andamento') }} -
{{ $totalAbertas }} {{ __('no total') }}
@if ($totalAbertas === 0)
{{ __('Nenhuma demanda aberta no momento.') }}
@else
@foreach ($prioConfig as $key => $cfg)
@php
$qtd = (int) ($abertasPorPrioridade[$key] ?? 0);
$pct = $totalAbertas > 0 ? round(($qtd / $totalAbertas) * 100) : 0;
@endphp
{{ __($cfg['label']) }}
{{ $qtd }}
@if ($qtd > 0)
({{ $pct }}%)
@endif
@endforeach
@endif
{{-- Linha 2: Próximas com Prazo | Recentes ─────────────────────── --}}
{{-- Próximas com Prazo --}}
@if ($proximasPrazo['vencidas']->isEmpty() && $proximasPrazo['proximas']->isEmpty())
{{ __('Nenhum prazo vencido ou próximo.') }}
@if ($totalAbertas > 0)
{{ __('Defina prazos ao criar demandas para receber alertas aqui.') }}
@endif
@endif
{{-- Vencidas --}}
@foreach ($proximasPrazo['vencidas'] as $dem)
@php $diasAtraso = (int) \Carbon\Carbon::parse($dem->prazo)->diffInDays(now()); @endphp
{{ $dem->prazo->format('d/m') }}
@endforeach
{{-- Próximas --}}
@foreach ($proximasPrazo['proximas'] as $dem)
@php $diasRestantes = (int) now()->diffInDays(\Carbon\Carbon::parse($dem->prazo)); @endphp
{{ $dem->prazo->format('d/m') }}
@endforeach
{{-- Recentes --}}
{{ __('Recentes') }}
@if ($recentes->isEmpty())
{{ __('Nenhuma demanda encontrada.') }}
@else
| {{ __('Nº') }} |
{{ __('Título') }} |
{{ __('Status') }} |
{{ __('Abertura') }} |
@foreach ($recentes as $d)
@php
$sColor = match ($d->status) {
'em_andamento' => 'primary',
'pendente' => 'warning',
'atendido' => 'success',
default => 'secondary',
};
$pColor = match ($d->prioridade) {
'critica' => 'danger',
'alta' => 'warning',
'media' => 'info',
default => 'success',
};
@endphp
| {{ $d->numero }} |
{{ $d->titulo }}
@if ($d->prazo && $d->prazo->isPast() && !in_array($d->status, ['atendido','cancelado']))
{{ __('Prazo vencido') }}
@endif
|
{{ __($statusLabels[$d->status] ?? $d->status) }}
|
{{ $d->data_abertura?->format('d/m/Y') ?? '-' }}
|
@endforeach
@endif
@endif
{{-- fim condicional secretário/usuário --}}