# Patch 1 — `EncomendaController::importar()`

**Ficheiro:** `app/Http/Controllers/EncomendaController.php`

## Porquê

O método atual chama `Encomenda::excluir()` seguido de `Encomenda::cadastra()`.
O `excluir()` faz `delete()` real em `entregas`, `programacao_entregas` e
`encomendas`. Enquanto o CSV foi a única fonte de dados isto era inofensivo.

A partir do momento em que o motorista regista enchimentos, descargas, fotos e
horas, o upload das 19h passaria a apagar tudo o que foi feito nesse dia — sem
recuperação possível. É por isso que este é o primeiro patch a aplicar.

## Substituir

```php
    public function importar(Request $request)
    {
        $request->validate([
            'arquivoCSV' => 'required|mimes:csv,txt|max:2048',
        ]);

        $file = $request->arquivoCSV;
        $extension = $file->getClientOriginalExtension();
        $fileNameToStore = 'ENCOMENDAS' . Carbon::now() . '.' . $extension;

        $path = $file->storeAs('public/csv', $fileNameToStore);
        $path = storage_path() . '/app/public/csv/' . $fileNameToStore;

        $dadosCsv = $this->obtemDadosCsv($path);

        $encomenda = new Encomenda();
        $reposta = $encomenda->excluir($dadosCsv);
        $reposta = $encomenda->cadastra($dadosCsv);

        $vendasController = new VendaController();
        $comissoes = $vendasController->preencherValorComissao();

        return redirect()->route('encomendas_index')->with('success', 'Encomendas importadas com sucesso!');
    }
```

## Por

```php
    /**
     * Importa o CSV de encomendas do Primavera.
     *
     * Passou a usar ImportacaoEncomendasService: upsert idempotente, que
     * preserva tudo o que o motorista registou no terreno. Ver o cabeçalho
     * desse serviço para a explicação completa.
     */
    public function importar(Request $request, \App\Services\Logistica\ImportacaoEncomendasService $importador)
    {
        $request->validate([
            // O limite antigo (2 MB) é curto para o CSV do mês inteiro.
            'arquivoCSV' => 'required|mimes:csv,txt|max:20480',
        ]);

        $file = $request->arquivoCSV;
        $extension = $file->getClientOriginalExtension();
        $fileNameToStore = 'ENCOMENDAS_' . Carbon::now()->format('Ymd_His') . '.' . $extension;

        $file->storeAs('public/csv', $fileNameToStore);
        $path = storage_path() . '/app/public/csv/' . $fileNameToStore;

        // Import pesado: aumentar o tempo de execução no ambiente de produção.
        @set_time_limit(600);

        $importacao = $importador->importar($path, auth()->id(), $fileNameToStore);

        // Comissões continuam a ser recalculadas depois da importação.
        (new VendaController())->preencherValorComissao();

        $mensagem = 'Encomendas importadas. ' . $importacao->resumo;

        if ($importacao->motoristas_por_confirmar > 0) {
            $mensagem .= ' Há ' . $importacao->motoristas_por_confirmar
                       . ' mapa(s) com motorista por confirmar no Portal de Descargas.';
        }

        return redirect()
            ->route('portal_descargas.index', ['so_por_confirmar' => $importacao->motoristas_por_confirmar > 0 ? 1 : 0])
            ->with('success', $mensagem);
    }
```

## Manter

O método `obtemDadosCsv()` pode ficar — deixa de ser usado pelo `importar()`,
mas não estorva.

**Não apagar** `Encomenda::cadastra()` nem `Encomenda::excluir()` já: deixe-os
ficar até validar o novo importador em staging. Depois disso podem sair.

## Nota sobre o limite de upload

O `max:2048` do validador são 2 MB. Confirme também no servidor:
`upload_max_filesize` e `post_max_size` no `php.ini`.
