# Licitações Antigas — Views e UX

---

## 1. Arquivos Blade do módulo

As views são replicadas por template de layout. O controller resolve o
caminho dinamicamente:

```php
view('portal.layouts.' . $this->getTemplateActived() . '.licitacao.licitacao-antiga.index')
view('portal.layouts.' . $this->getTemplateActived() . '.licitacao.licitacao-antiga.show')
```

`getTemplateActived()` (`v6/app/Http/Controllers/Admin/Controller.php:39-49`)
lê `configurations.key = 'layout'` (valor atual na base: `modelo1`) e aborta
com 404 se a view `portal.layouts.{layout}.home.index` não existir.

### 1.1 Conjunto de arquivos (idêntico em v5 e v6)

| Template | Arquivos |
|---|---|
| `modelo1` | `v6/resources/views/portal/layouts/modelo1/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |
| `modelo2` | `v6/resources/views/portal/layouts/modelo2/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |
| `modelo3` | `v6/resources/views/portal/layouts/modelo3/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |
| `modelo4` | `v6/resources/views/portal/layouts/modelo4/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |
| `modelo5` | `v6/resources/views/portal/layouts/modelo5/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |
| `modelo6` | `v6/resources/views/portal/layouts/modelo6/licitacao/licitacao-antiga/{index,show,filtro}.blade.php` |

**Templates sem suporte ao módulo:**
- `newsbit` — possui `v6/resources/views/portal/layouts/newsbit/licitacao/` com
  apenas `index.blade.php` e `show.blade.php` (módulo novo); sem pasta
  `licitacao-antiga`.
- `default` — `v6/resources/views/portal/layouts/default/` não possui a pasta
  `licitacao/`; as views legadas nesse layout existem apenas como
  `v6/resources/views/portal/layouts/default/pages/statics/licitacoes/legacys-index.blade.php`
  e `legacys-show.blade.php`, que são **órfãs** (nenhuma rota/controller as
  renderiza — o controller aponta para `portal.layouts.default.licitacao.licitacao-antiga.*`).

Consequência: se `configurations.layout` for `newsbit` ou `default`, as rotas
do módulo quebram com "view not found".

## 2. Função de cada view

### 2.1 `index.blade.php` (listagem)

- Estende `portal.layouts.{modelo}.layout.layout`.
- Breadcrumb: `Breadcrumbs::view('portal.layouts.{modelo}.layout.breadcrumb', 'licitacoes', 'Licitações')`.
- Cabeçalho "Licitações" e botão "Ir para Licitações após 2018" → `url('licitacoes')`.
- Inclui o filtro: `@include('portal.layouts.{modelo}.licitacao.licitacao-antiga.filtro')`.
- Laço `@foreach ($biddings as $biddingLegacy)` renderizando
  `route('licitacoes.old.show', $biddingLegacy->id)`, `titulo` e `data`.
- Paginação: `{{ $biddings->appends(Request::except('page'))->links() }}` quando `$links == true`
  (a variável é sempre `true` — ver `BiddingOldController.php:59`).
- Estado vazio: "Nenhuma informação encontrada!".

### 2.2 `filtro.blade.php` (formulário de filtros)

- `Form::open(['url' => ['licitacoes-ate-2018'], 'id' => 'form-filter'])`.
- Campos: `tipo_modalidade` (`Form::select` com `$modalitiesLegacy`),
  `ids_secretarias` (`Form::select` com `$jurisdictionalLegacy`),
  `ano` (`<select>` com `$years`), `informacoes` (`<input type="text">`).
- Botões "Consultar" (submit) e "Limpar campos" (`onclick="toCleanFields();"`).
- Script inline:

```html
<script>
    function  toCleanFields() {
        $("input[name='informacoes']").val('');
        $("input[name='ano']").val('');
        $("input[name='tipo_modalidade']").val('');
        $("input[name='ids_secretarias']").val('');
    }
</script>
```

Observação: o botão "Limpar campos" zera os campos mas **não submete** o
formulário — a listagem continua exibindo o resultado filtrado até que o
usuário clique em "Consultar" de novo.

### 2.3 `show.blade.php` (detalhe)

- Cabeçalho "Aviso de Licitação", título (`$bidding->titulo`) e data por extenso:

```blade
<p>{{ date('d', strtotime($bidding->data)) }} de {{ translateMonth(date('m', strtotime($bidding->data))) }} de {{ date('Y', strtotime($bidding->data)) }}</p>
```

- Corpo do aviso renderizado como HTML bruto:

```blade
<p style="font-size: 10px !important;">{!!  $bidding->informacoes !!}</p>
```

- Bloco "Arquivos para Download": para cada `$bidding->archives`, exibe o link
  `/storage/licitacoes_old/{id}/{name}` **apenas se** `file_exist(url(...))`
  for verdadeiro; caso contrário imprime "Arquivos inexistentes".

```blade
@if(file_exist(url('/storage/licitacoes_old/'.$bidding->id.'/'.$archive->name)))
    <a href="{{ url('/storage/licitacoes_old/'.$bidding->id.'/'.$archive->name) }}" target="_blank" ...>
        <small class="d-inline-block">{{ $archive->title or $archive->name }}</small>
    </a>
@else
    <p>Arquivos inexistentes</p>
@endif
```

- Rodapé com link "Voltar" → `route('licitacoes.old.index')`.

## 3. O que o cidadão vê

| Tela | Elementos |
|---|---|
| Listagem | Título da licitação, data, link para o detalhe, paginação de 10 itens, formulário de filtros. |
| Detalhe | Título, data em português, texto do aviso (HTML), anexos para download, botão de retorno. |
| Transição | Botão "Ir para Licitações após 2018" nas duas telas (navegação para o módulo novo). |

Não há: ordenação por coluna, exportação, impressão, contagem de resultados,
exibição de `numero`, `cnpj` ou do nome da secretaria/modalidade nos resultados
(o `tipo_modalidade` e `ids_secretarias` só são exibidos como ids nos filtros).

## 4. O que o operador vê (CMS)

Nada específico deste módulo. A única interação é o toggle de status do slug
`licitacoes-antigas` na tela de Módulos
(`v6/resources/views/admin/modulos/form.blade.php:85`), gravado por
`Admin\ModulosController@update` (`v6/app/Http/Controllers/Admin/ModulosController.php:32-50`).
O status não é consultado pelo controller legado — desligar o módulo **não**
esconde as rotas nem o link "Ir para licitações até 2018".

## 5. JS / Ajax / assets

- **Sem Ajax** no módulo legado: a listagem é renderizada no servidor e a
  paginação é por links. O `v6/public/assets/js/custom/contents/licitacoes/`
  contém apenas scripts do módulo **novo** (`licitacao/datatable.js`,
  `contratos/datatable.js`, `proponentes/**`, `unidades-gestoras/datatable.js`).
- Único JS próprio: a função inline `toCleanFields()` em cada `filtro.blade.php`.
- CSS: Bootstrap 4 do próprio layout do portal (classes `form-control`,
  `table-hover`, `text-uppercase`, `txt-color-2`, etc.).

## 6. Exportações

**Inexistentes.** O módulo novo exporta Excel/PDF/CSV via
`v6/app/Exports/BiddingsExport.php` e `v6/resources/views/exports/biddings.blade.php`;
o legado não tem export, e a rota `exportacao`
(`v6/routes/web.php:188`, `Portal\BiddingsController@index`) consulta apenas a
tabela `biddings`.

## 7. Links de entrada no portal

| Origem | Destino |
|---|---|
| `v6/resources/views/portal/layouts/default/pages/statics/licitacoes/list.blade.php:13` | `/licitacoes-ate-2018` ("Ir para licitações até 2018") |
| `v6/resources/views/portal/layouts/modelo1/licitacao/index.blade.php:19` | `route('licitacoes.old.index')` — botão de entrada para o acervo legado (presente em modelo1..modelo6) |
| `v6/resources/views/portal/layouts/modelo1/licitacao/licitacao-antiga/index.blade.php` (e equivalentes em modelo2, modelo3, modelo4, modelo5, modelo6) | `url('licitacoes')` ("Ir para Licitações após 2018") |
| `v6/resources/views/portal/layouts/modelo1/licitacao/licitacao-antiga/show.blade.php` (e equivalentes em modelo2, modelo3, modelo4, modelo5, modelo6) | `url('licitacoes')` ("Ir para Licitações após 2018") |

Portanto há dois pontos de entrada para o acervo legado: o link textual
hardcoded `/licitacoes-ate-2018` no layout `default` e o botão por nome de rota
`licitacoes.old.index` nas telas de licitações novas dos modelos 1..6.
