{{-- Partial: payload cards grid Variáveis esperadas: $chamado (Chamado model) --}} @if ($chamado->category?->comment != 'rh_pre_contratacao') @php $skipPayloadKeys = [ 'filial', 'setor', 'categoria', 'user_recipient', 'form_type', 'tipo_chamado', 'suppliers_id', 'prioridade', 'priority', 'urgency', 'impact','add', 'form_label', 'gitea_issue_id', 'gitea_issue_url', 'nome_produto', ]; // Oculta "msg" quando "descricao" já carrega a descrição principal if (!empty($chamado->payload['descricao'])) { $skipPayloadKeys[] = 'msg'; } // "Ajuste/Nota": a placa é pós-atendimento e já tem seu próprio // bloco editável logo abaixo (ver admin/modal/conteudo.blade.php) — // exibi-la aqui de novo, só como leitura, seria redundante. if ($chamado->category?->comment === 'logistica_nota') { $skipPayloadKeys[] = 'placa'; } $payloadLabels = [ // Identificação 'name' => 'Nome', 'email' => 'E-mail', 'nome_user' => 'Nome', 'cpf' => 'CPF', 'funcao' => 'Grupo de acesso', 'user' => 'Usuário', 'usuario_chat' => 'Chat / Messenger', 'matricula' => 'Matrícula', 'filial_nome' => 'Filial', 'setor_nome' => 'Setor', 'ocupacao' => 'Ocupação', 'check_user' => 'Redefinir usuário', // Contato 'contato' => 'Contato no local', 'ddd' => 'DDD', 'telefone' => 'Telefone', 'ddd-x' => 'DDD (ramal)', 'telefone-x' => 'Ramal', // Datas 'date-start' => 'Data início', 'date-ends' => 'Data fim', 'time_to_resolve' => 'Prazo', // Texto livre 'msg' => 'Descrição', 'descricao' => 'Descrição', 'observacoes' => 'Observações', // Rede / maquininhas 'tipo_solicitacao' => 'Tipo de solicitação', 'motivo_troca' => 'Motivo da troca', 'estabelecimento' => 'Estabelecimento', 'tecnologia' => 'Tecnologia', 'quantidade' => 'Quantidade', 'quantity' => 'Quantidade', 'terminal' => 'Terminais', 'responsavel_nome' => 'Responsável', 'responsavel_telefone' => 'Tel. responsável', 'responsavel_email' => 'E-mail responsável', 'endereco' => 'Endereço', 'horarios' => 'Horários disponíveis', // Dev / Gitea 'titulo' => 'Título', 'gitea_repo' => 'Repositório Gitea', 'trace' => 'Trace', 'source' => 'Origem', 'count' => 'Ocorrências', 'user_id' => 'ID do usuário', 'username' => 'Username', 'user_level' => 'Nível do usuário', // Logística 'codigo_produto' => 'Produto', 'itens' => 'Itens', 'deposito_origem' => 'Depósito de origem', 'add' => 'Adicional', 'nome_cliente' => 'Cliente', 'numero_nota' => 'Número da nota/pedido', 'placa' => 'Placa', 'categoria_acessorio' => 'Categoria', 'motorista_id' => 'Motorista', 'acessorio_estoque_id' => 'Acessório', 'material' => 'Material', 'material_outro' => 'Material (outro)', 'descricao_modelo' => 'Modelo do pneu', // RH 'cargo' => 'Cargo', 'nome_candidato' => 'Nome do candidato', 'cpf_candidato' => 'CPF', 'data_nascimento' => 'Data de nascimento', 'data_admissao_prevista' => 'Admissão prevista', 'sexo' => 'Sexo', 'estado_civil' => 'Estado civil', 'possui_filhos' => 'Possui filhos', 'qtd_filhos' => 'Qtd. filhos', 'pcd' => 'PCD', 'dados_extras.setor' => 'Setor', ]; $descFields = ['msg','titulo','trace', 'source', 'descricao', 'observacoes', 'add', 'horarios']; $fullWidthFields = ['codigo_produto', 'itens']; @endphp @if (!empty($chamado->payload)) @php // Garante que campos de produto aparecem antes da descrição $payloadOrdered = collect($chamado->payload) ->sortBy(function ($v, $k) { $order = [ 'itens' => 0, 'codigo_produto' => 1, 'nome_produto' => 2, 'quantidade' => 3, 'deposito_origem' => 4, 'msg' => 5, 'descricao' => 6, ]; return $order[$k] ?? 99; }) ->all(); @endphp @if (!empty($chamado->payload['gitea_issue_url']))
Issue Gitea
{{ $chamado->payload['gitea_repo'] ?? '' }} #{{ $chamado->payload['gitea_issue_id'] ?? '' }}
@endif
@foreach ($payloadOrdered as $key => $value) @if ((!empty($value) || $value === 0) && !in_array($key, $skipPayloadKeys) && (!(is_int($value) && !is_string($value)) || in_array($key, ['count', 'quantidade', 'placa', 'motorista_id', 'acessorio_estoque_id']))) @php $label = $payloadLabels[$key] ?? ucfirst(str_replace(['-', '_'], ' ', $key)); $isDate = is_string($value) && preg_match('/^\d{4}-\d{2}-\d{2}/', $value); $isDesc = in_array($key, $descFields); $isFullWidth = $isDesc || in_array($key, $fullWidthFields); @endphp
@if ($key === 'itens' && is_array($value) && !array_key_exists('codigo_produto', $value[0] ?? [])) {{-- Solicitação de Acessórios: pilha de itens de estoque (ou "outros", material livre), cada um com sua quantidade. --}} @php $itensAcessorio = collect($value)->map(function ($i) { $estoque = !empty($i['estoque_id']) ? \App\Models\Estoque::find($i['estoque_id']) : null; return [ 'nome' => $estoque->item_material ?? ($i['material_outro'] ?? 'Item removido'), 'qtd' => (int) ($i['quantidade'] ?? 0), ]; }); @endphp
Itens solicitados ({{ $itensAcessorio->count() }})
@foreach ($itensAcessorio as $item)
{{ $item['nome'] }} {{ $item['qtd'] }}x
@endforeach
@elseif ($key === 'itens' && is_array($value)) @php // A quantidade dos itens abertos como "zerar saldo" só existe // depois que o técnico conta, e essa contagem fica na tabela do // relatório — não no payload, que é o que a filial enviou. $itensAjuste = $chamado->ajustesEstoque->isNotEmpty() ? $chamado->ajustesEstoque->map(fn($i) => [ 'codigo' => $i->codigo_produto, 'nome' => $i->nome_produto, 'tipo' => $i->tipo_ajuste?->value, 'qtd' => $i->quantidade_label, ]) : collect($value)->map(fn($i) => [ 'codigo' => $i['codigo_produto'] ?? '—', 'nome' => $i['nome_produto'] ?? null, 'tipo' => $i['tipo'] ?? null, 'qtd' => filter_var($i['zerar'] ?? false, FILTER_VALIDATE_BOOLEAN) ? 'Zerar saldo' : \App\Models\LogisticaAjusteEstoque::formatarQuantidade( \App\Helpers\TicketHelper::quantidadeAjuste($i['quantidade'] ?? 0) ), ]); @endphp
Itens do ajuste ({{ $itensAjuste->count() }})
@foreach ($itensAjuste as $item) @php $entrada = $item['tipo'] === 'entrada'; $cor = $item['tipo'] === null ? 'var(--dm-text-muted)' : ($entrada ? '#22c97b' : '#e05260'); // Rótulo por extenso para quem copia o texto — o // sinal +/− só faz sentido olhando a cor na tela. $movimento = $item['tipo'] === null ? '' : ($entrada ? 'Entrada' : 'Baixa'); @endphp
{{ $item['tipo'] === null ? '·' : ($entrada ? '+' : '−') }} {{ $item['codigo'] }} @if (!empty($item['nome'])) — {{ $item['nome'] }} @endif {{-- Etiqueta translúcida na cor do movimento: numa lista de nomes longos, o número é o que se procura, e solto ele desaparecia no fim da linha. --}} {{ $item['qtd'] }}
{{-- Linha em texto puro, escondida — é o que vai pro clipboard no lugar do sinal +/− (que só faz sentido olhando a cor). --}} @endforeach
@elseif ($key === 'codigo_produto')
{{ $label }}
{{ $value }} @if (!empty($chamado->payload['nome_produto'])) — {{ $chamado->payload['nome_produto'] }} @endif
@elseif ($key === 'deposito_origem')
{{ $label }}
{{ \App\Enums\DepositoMatriz::rotulo((string) $value) }}
@elseif ($key === 'placa')
{{ $label }}
{{ optional(\App\Models\LogisticaPlaca::find($value))->placa ?? $value }}
@elseif ($key === 'categoria_acessorio')
{{ $label }}
{{ config("logistica_acessorios.categorias.$value.label") ?? $value }}
@elseif ($key === 'motorista_id')
{{ $label }}
{{ optional(\App\Models\UserInfos::find($value))->name ?? $value }}
@elseif ($key === 'acessorio_estoque_id')
{{ $label }}
{{ optional(\App\Models\Estoque::find($value))->item_material ?? $value }}
@elseif ($key === 'material')
{{ $label }}
{{ $value === 'outros' ? 'Outros' : (optional(\App\Models\Estoque::find($value))->item_material ?? $value) }}
@elseif ($key === 'count') {{-- Bug report (BugReportService::report): cada ocorrência nova do mesmo erro soma aqui e atualiza date_mod — mostra as duas juntas, senão "3 ocorrências" não diz se foi hoje ou há um mês. --}}
{{ $label }}
{{ $value }}
Última ocorrência
{{ $chamado->date_mod ? \Illuminate\Support\Carbon::parse($chamado->date_mod)->format('d/m/Y H:i') : '—' }}
@elseif ($isDesc) @php $strVal = is_string($value) ? $value : (string) $value; $isLong = strlen($strVal) > 60; @endphp
{{ $label }}
@if ($isLong) Ver mais @endif
@if ($isLong)
{!! nl2br(e(substr($strVal, 0, 200))) !!}…
@else {!! nl2br(e($strVal)) !!} @endif
@else
{{ $label }}
@if ($isDate) {{ date('d/m/Y', strtotime($value)) }} @elseif (is_array($value)) {{ implode(', ', $value) }} @else {{ $value }} @endif
@endif
@endif @endforeach
@else

@conteudo($chamado->content ?? '')

@endif @endif