@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 }}
Modalidade: {{ $licitacao->modalidade?->nome ?? 'Não informada' }} | Status atual: {{ $licitacaoStatusLabel($licitacao->status) }}
Linha do tempo do processo
{{ $etapa['titulo'] }}
{{ $etapa['detalhe'] }}
{{ $vencedores->count() > 1 ? 'Vencedores da licitação' : 'Vencedor da licitação' }}
@if ($vencedores->isNotEmpty())Proposta: {{ $formatMoney($vencedor->valor_proposta) }}
@if ($contratosLabel !== '')Contratos vinculados: {{ $contratosLabel }}
@endifResumo 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
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' }}
Participantes e propostas
@if ($licitacao->participantes->isNotEmpty())| Empresa | CNPJ | Proposta | Classificação |
|---|---|---|---|
| {{ $participante->empresa_nome }} | {{ $participante->cnpj ?: 'Não informado' }} | {{ $formatMoney($participante->valor_proposta) }} | {{ $participante->tipo ?: 'Participante' }} |
Contratos
@if ($contratosRenderizados->isNotEmpty()) @foreach ($contratosRenderizados as $contrato)Habilitação
@if ($habilitacaoAgrupada->isNotEmpty()) @foreach ($habilitacaoAgrupada as $categoria => $items)| Item | Obrigatório | Status | Observação |
|---|---|---|---|
| {{ $item->nome }} | {{ $item->obrigatorio === 'sim' || $item->obrigatorio === true ? 'Sim' : 'Não' }} | {{ $habilitacaoStatusLabel($item->pivot?->status) }} | {{ $item->pivot?->observacao ?: '—' }} |
Checklist e respostas
@if ($checklistRespostas->isNotEmpty()) @foreach ($checklistRespostas as $resposta)Questão {{ $resposta->check_list_id }}
Observação
{{ $resposta->observacao ?: 'Sem observação.' }}
Leis relacionadas
Anexos
@if ($resposta->arquivos->isNotEmpty()) @elseNenhum anexo vinculado a esta resposta.
@endifAnexos
@if ($anexos->isNotEmpty())| 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 ?? '—' }} |
Parecer
@if (filled($licitacao->parecer))Eventos registrados
@if ($timelines->isNotEmpty()){{ $evento->titulo }}