@php $section = $section ?? 'completa'; $contratoId = $contratoId ?? null; $printTitle = $printTitle ?? 'Impressão da licitação'; $showAllSections = $section === 'completa'; $showDados = $showAllSections || $section === 'dados'; $showParticipantes = $showAllSections || $section === 'participantes'; $showContratos = $showAllSections || $section === 'contratos' || $section === 'contrato'; $showHabilitacao = $showAllSections || $section === 'habilitacao'; $showChecklist = $showAllSections || $section === 'checklist'; $showAnexos = $showAllSections || $section === 'anexos'; $showParecer = $showAllSections || $section === 'parecer'; $showTimeline = $showAllSections; $contratosOrdenados = $licitacao->contratos->sortByDesc('data_assinatura')->values(); $contratoPrincipal = $contratosOrdenados->first(); $contratosRenderizados = $section === 'contrato' ? $contratosOrdenados->filter(fn ($contrato) => (int) $contrato->id === (int) $contratoId)->values() : $contratosOrdenados; $participantesOrdenados = $licitacao->participantes->sortBy('valor_proposta')->values(); $vencedoresPorContrato = $contratosOrdenados->pluck('vencedor')->filter(); $vencedoresMarcados = $licitacao->participantes->filter(fn ($participante) => strcasecmp((string) $participante->tipo, 'Vencedor') === 0); $vencedores = $vencedoresPorContrato ->concat($vencedoresMarcados) ->unique(fn ($participante) => $participante->id ? 'id:' . $participante->id : 'ref:' . strtolower((string) ($participante->cnpj ?: $participante->empresa_nome))) ->values(); if ($vencedores->isEmpty() && $participantesOrdenados->isNotEmpty()) { $vencedores = $participantesOrdenados->take(1)->values(); } $vencedorPrincipal = $vencedores->first(); $tituloEtapaVencedor = $vencedores->count() > 1 ? 'Vencedores' : 'Vencedor'; $detalheVencedorTimeline = $vencedores->isEmpty() ? 'Não definido' : ($vencedores->count() === 1 ? ($vencedorPrincipal?->empresa_nome ?: 'Vencedor definido') : $vencedores->count() . ' vencedores'); $temHabilitacao = $licitacao->itensHabilitacao->contains(function ($item) { return filled($item->pivot?->status) && $item->pivot->status !== 'na'; }) || $licitacao->timelines->contains('tipo', 'habilitacao_aprovada'); $etapas = [ [ 'titulo' => 'Planejamento', 'concluida' => true, 'detalhe' => $licitacao->modalidade?->nome ?: 'Licitação criada', ], [ 'titulo' => 'Aviso', 'concluida' => filled($licitacao->data_aviso), 'detalhe' => optional($licitacao->data_aviso)?->format('d/m/Y') ?: 'Pendente', ], [ 'titulo' => 'Abertura', 'concluida' => filled($licitacao->data_abertura), 'detalhe' => optional($licitacao->data_abertura)?->format('d/m/Y') ?: 'Pendente', ], [ 'titulo' => 'Habilitação', 'concluida' => $temHabilitacao, 'detalhe' => $temHabilitacao ? 'Itens avaliados' : 'Pendente', ], [ 'titulo' => 'Adjudicação', 'concluida' => filled($licitacao->data_adjudicacao), 'detalhe' => optional($licitacao->data_adjudicacao)?->format('d/m/Y') ?: 'Pendente', ], [ 'titulo' => $tituloEtapaVencedor, 'concluida' => $vencedores->isNotEmpty(), 'detalhe' => $detalheVencedorTimeline, ], [ 'titulo' => 'Homologação', 'concluida' => filled($licitacao->data_homologacao) || $licitacao->status === 'homologado', 'detalhe' => optional($licitacao->data_homologacao)?->format('d/m/Y') ?: 'Pendente', ], [ 'titulo' => 'Contrato', 'concluida' => $contratoPrincipal !== null, 'detalhe' => $contratoPrincipal?->n_contrato ? 'Nº ' . $contratoPrincipal->n_contrato : 'Pendente', ], ]; $timelines = $licitacao->timelines->sortBy('created_at')->values(); $anexos = $licitacao->anexos->sortByDesc('data_anexo')->values(); $habilitacaoAgrupada = $licitacao->itensHabilitacao ->sortBy(fn ($item) => sprintf('%s-%s', $item->categoria ?? 'Outros', $item->nome ?? '')) ->groupBy(fn ($item) => $item->categoria ?: 'Outros'); $checklistRespostas = $licitacao->checklistRespostas ->loadMissing('checkList.leis', 'arquivos', 'responsavel') ->sortBy('check_list_id') ->values(); $formatMoney = static fn ($value) => filled($value) ? 'R$ ' . number_format((float) $value, 2, ',', '.') : 'Não informado'; $formatDate = static fn ($value) => filled($value) ? \Illuminate\Support\Carbon::parse($value)->format('d/m/Y') : 'Não informado'; $formatDateTime = static fn ($value) => filled($value) ? \Illuminate\Support\Carbon::parse($value)->format('d/m/Y H:i') : 'Não informado'; $formatFileSize = static function ($bytes) { if (!$bytes) { return '—'; } if ($bytes < 1024) { return $bytes . ' B' ; } if ($bytes < 1024 * 1024) { return number_format($bytes / 1024, 1, ',' , '.' ) . ' KB' ; } return number_format($bytes / (1024 * 1024), 1, ',' , '.' ) . ' MB' ; }; $licitacaoStatusLabel=static fn ($value)=> filled($value) ? ucfirst(str_replace('-', ' ', (string) $value)) : 'Não informado'; $habilitacaoStatusLabel = static fn ($value) => match ($value) { 'sim' => 'Sim', 'nao' => 'Não', default => 'Não se aplica', }; $checklistRespostaLabel = static fn ($value) => match ($value) { 'atendida' => 'Atendida', 'nao_atendida' => 'Não atendida', 'parcialmente_atendida' => 'Parcialmente atendida', 'nao_se_aplica' => 'Não se aplica', 'pendente' => 'Pendente', default => 'Não respondida', }; $checklistStatusLabel = static fn ($value) => $value === 'respondida' ? 'Respondida' : 'Aguardando resposta'; @endphp

{{ $printTitle }}

{{ $licitacao->objeto }}

Modalidade: {{ $licitacao->modalidade?->nome ?? 'Não informada' }} | Status atual: {{ $licitacaoStatusLabel($licitacao->status) }}

@if ($showAllSections)

Linha do tempo do processo

@foreach ($etapas as $etapa)

{{ $etapa['titulo'] }}

{{ $etapa['detalhe'] }}

@endforeach

{{ $vencedores->count() > 1 ? 'Vencedores da licitação' : 'Vencedor da licitação' }}

@if ($vencedores->isNotEmpty())
@foreach ($vencedores as $vencedor) @php $contratosDoVencedor = $contratosOrdenados ->filter(fn ($contrato) => (int) $contrato->vencedor_id === (int) $vencedor->id) ->values(); $contratosLabel = $contratosDoVencedor ->map(fn ($contrato) => $contrato->n_contrato ?: ('#' . $contrato->id)) ->implode(', '); @endphp

{{ $vencedor->empresa_nome ?: 'Vencedor sem nome informado' }}

CNPJ: {{ $vencedor->cnpj ?: 'Não informado' }} @if ($vencedor->tipo) | Situação: {{ $vencedor->tipo }} @endif

Proposta: {{ $formatMoney($vencedor->valor_proposta) }}

@if ($contratosLabel !== '')

Contratos vinculados: {{ $contratosLabel }}

@endif
@endforeach
@else

Vencedor ainda não definido

Cadastre participantes e contratos para completar este bloco.

@endif

Resumo da disputa

{{ $vencedores->count() }} {{ $vencedores->count() === 1 ? 'vencedor' : 'vencedores' }}

Contratos vinculados: {{ $contratosOrdenados->count() }}
Participantes: {{ $licitacao->participantes->count() }}

Último contrato registrado

{{ $contratoPrincipal?->n_contrato ?? 'Pendente' }}

Valor: {{ $contratoPrincipal ? $formatMoney($contratoPrincipal->valor_contrato) : 'Não informado' }}
Assinatura: {{ optional($contratoPrincipal?->data_assinatura)->format('d/m/Y') ?? 'Não informada' }}
Publicação: {{ optional($contratoPrincipal?->data_publicacao)->format('d/m/Y') ?? 'Não informada' }}
Vigência: {{ $contratoPrincipal?->vigencia ? $contratoPrincipal->vigencia . ' dias' : 'Não informada' }}

Valor máximo

{{ $formatMoney($licitacao->valor_maximo_estabelecido) }}

{{ $licitacao->valor_maximo_descricao ?: 'Referência da fase inicial' }}

Valor homologado

{{ $formatMoney($licitacao->valor_homologacao) }}

{{ $licitacao->valor_homologacao_descricao ?: 'Resultado final do certame' }}

Participantes

{{ $licitacao->participantes->count() }}

Empresas registradas na disputa

@endif @if ($showDados)

Dados principais

Identificador

Licitação {{ $licitacao->id }}

Status

{{ $licitacaoStatusLabel($licitacao->status) }}

Data do aviso

{{ optional($licitacao->data_aviso)->format('d/m/Y') ?? 'Não informada' }}

Data de abertura

{{ optional($licitacao->data_abertura)->format('d/m/Y') ?? 'Não informada' }}

Data de adjudicação

{{ optional($licitacao->data_adjudicacao)->format('d/m/Y') ?? 'Não informada' }}

Data de homologação

{{ optional($licitacao->data_homologacao)->format('d/m/Y') ?? 'Não informada' }}

Valor máximo estabelecido

{{ $formatMoney($licitacao->valor_maximo_estabelecido) }}

Valor homologado

{{ $formatMoney($licitacao->valor_homologacao) }}

Objeto

{{ $licitacao->objeto ?: 'Não informado' }}

Descrição do valor máximo

{{ $licitacao->valor_maximo_descricao ?: 'Não informada' }}

Descrição do valor homologado

{{ $licitacao->valor_homologacao_descricao ?: 'Não informada' }}

@endif @if ($showParticipantes)

Participantes e propostas

@if ($licitacao->participantes->isNotEmpty())
@foreach ($licitacao->participantes->sortBy('valor_proposta') as $participante) @endforeach
Empresa CNPJ Proposta Classificação
{{ $participante->empresa_nome }} {{ $participante->cnpj ?: 'Não informado' }} {{ $formatMoney($participante->valor_proposta) }} {{ $participante->tipo ?: 'Participante' }}
@else
Nenhum participante cadastrado para esta licitação.
@endif
@endif @if ($showContratos)

Contratos

@if ($contratosRenderizados->isNotEmpty()) @foreach ($contratosRenderizados as $contrato)

Contrato {{ $contrato->n_contrato ?: 'Sem número informado' }}

Vencedor

{{ $contrato->vencedor?->empresa_nome ?? 'Não informado' }}

CNPJ

{{ $contrato->vencedor?->cnpj ?? 'Não informado' }}

Valor do contrato

{{ $formatMoney($contrato->valor_contrato) }}

Vigência

{{ $contrato->vigencia ? $contrato->vigencia . ' dias' : 'Não informada' }}

Assinatura

{{ $formatDate($contrato->data_assinatura) }}

Publicação

{{ $formatDate($contrato->data_publicacao) }}

@endforeach @else
Nenhum contrato cadastrado para esta licitação.
@endif
@endif @if ($showHabilitacao)

Habilitação

@if ($habilitacaoAgrupada->isNotEmpty()) @foreach ($habilitacaoAgrupada as $categoria => $items)

{{ $categoria }}

@foreach ($items as $item) @endforeach
Item Obrigatório Status Observação
{{ $item->nome }} {{ $item->obrigatorio === 'sim' || $item->obrigatorio === true ? 'Sim' : 'Não' }} {{ $habilitacaoStatusLabel($item->pivot?->status) }} {{ $item->pivot?->observacao ?: '—' }}
@endforeach @else
Nenhum item de habilitação cadastrado.
@endif
@endif @if ($showChecklist)

Checklist e respostas

@if ($checklistRespostas->isNotEmpty()) @foreach ($checklistRespostas as $resposta)

Questão {{ $resposta->check_list_id }}

{{ $resposta->checkList?->pergunta ?? 'Pergunta não encontrada' }}

Resposta

{{ $checklistRespostaLabel($resposta->resposta) }}

Status

{{ $checklistStatusLabel($resposta->status) }}

Responsável

{{ $resposta->responsavel?->name ?? 'Não informado' }}

Data da resposta

{{ $formatDateTime($resposta->data_resposta) }}

Observação

{{ $resposta->observacao ?: 'Sem observação.' }}

@if ($resposta->checkList?->leis?->isNotEmpty())

Leis relacionadas

    @foreach ($resposta->checkList->leis as $lei)
  • {{ $lei->lei }} @if ($lei->desc_lei) - {{ $lei->desc_lei }} @endif
  • @endforeach
@endif

Anexos

@if ($resposta->arquivos->isNotEmpty())
    @foreach ($resposta->arquivos as $arquivo)
  • {{ $arquivo->nome_original }} ({{ $formatFileSize($arquivo->tamanho) }})
  • @endforeach
@else

Nenhum anexo vinculado a esta resposta.

@endif
@endforeach @else
Nenhuma resposta de checklist cadastrada para esta licitação.
@endif
@endif @if ($showAnexos)

Anexos

@if ($anexos->isNotEmpty())
@foreach ($anexos as $anexo) @endforeach
Nome Arquivo original Tipo Tamanho Data Enviado por
{{ $anexo->nome }} {{ $anexo->nome_original }} {{ $anexo->mime_type ?: 'Não informado' }} {{ $formatFileSize($anexo->tamanho) }} {{ $formatDate($anexo->data_anexo) }} {{ $anexo->usuario?->name ?? '—' }}
@else
Nenhum anexo vinculado a esta licitação.
@endif
@endif @if ($showParecer)

Parecer

@if (filled($licitacao->parecer))
{!! $licitacao->parecer !!}
@else
Nenhum parecer cadastrado para esta licitação.
@endif
@endif @if ($showTimeline)

Eventos registrados

@if ($timelines->isNotEmpty())
    @foreach ($timelines as $evento)
  • {{ $evento->titulo }}

    {{ $evento->descricao }} @if ($evento->created_at) | {{ $evento->created_at->format('d/m/Y H:i') }} @endif

  • @endforeach
@else
Ainda não há eventos registrados na linha do tempo desta licitação.
@endif
@endif