teste #7

Merged
victor merged 15 commits from teste into main 2026-07-15 19:30:26 -03:00
Showing only changes of commit 7d3753f9c5 - Show all commits

View File

@@ -1489,3 +1489,62 @@ feito manualmente para entregar ao cliente.
</details>
---
<details>
<summary><strong>🆕 Atualização 15/07/2026 — Entrega de Termo Especial (novo card de preço + lançamento com dois tipos)</strong></summary>
O negócio passou a diferenciar **termo normal** e **termo especial**, cada um com seu preço.
O modal de lançamento agora permite informar **quantos termos de cada tipo** o motorista
entregou, num único envio.
### 🆕 Funcionalidades
- **Novo card de preço "📋 Entrega de Termo Especial"** em **Admin → Configurações**
(chave `preco_termo_especial`, moeda). Criado com **R$ 0,00** — definir o valor real no
card antes de usar. O card aparece automático (a view itera todas as configs).
- **Novo pilar `tipo: termo_especial`** (enum 6, cor **ciano**, label "Entrega de Termo
Especial") — mesmo comportamento do termo normal: lote numa linha (`quantidade` × preço),
`manual: true`, `tracking_id` sintético `TERMO-<uuid>`.
- **Modal "📄 Entrega de termo" com dois steppers** lado a lado — "📄 Termo Normal"
(inicia em 1) e "📋 Termo Especial" (inicia em 0), cada um exibindo seu preço unitário.
Um clique em "Adicionar termos ✓" lança os dois lotes de uma vez (exige ao menos 1 termo
no total; mínimo 0 em cada stepper).
- **Exibição em todas as telas**: linha "Termo Especial" no painel 📊 Resumo do Passo 2,
card próprio no Revisar, badge ciano "Entrega de Termo Especial ×N" nos apontamentos
manuais (show) e nos PDFs (extrato, relatório do motorista e financeiro — automático,
iteram `TIPO_CORES`).
### ⚙️ Como funciona (técnico)
- **Migration** (rodar `db:migrate`): `20260715000001_add_preco_termo_especial_configuracao`
— cria a config `preco_termo_especial` (idempotente) + seed correspondente.
- `Configuracao`: chave nova em `CHAVES`/`CHAVES_MOEDA`/`LABELS`/`ICONES`/`mapa_de_precos`
+ helper `preco_termo_especial`.
- `Consolidacao#adicionar_termos!` ganhou o parâmetro **`tipo:`** (default `'termo'`,
validado em `termo`/`termo_especial`); o preço vem de
`ConsolidacaoEntrega.valor_para(tipo)`.
- `ConsolidacaoEntregasController#apontar_termo` lê `quantidade` (normal) +
`quantidade_especial` e cria **um lote por tipo** dentro de uma transação, auditando as
duas quantidades. `contar_manuais` soma a `quantidade` dos **dois** tipos de termo; os
agregados `group(:tipo).sum(:quantidade)` já funcionavam sem mudança.
- Stimulus: `apontamento_termo_controller.js` com targets `quantidade`/`quantidadeEspecial`
e ações `maisEspecial`/`menosEspecial`; `validacao_controller.js` com target opcional
`qtdTermoEspecial`.
### 📂 Arquivos
```
db/migrate/20260715000001_add_preco_termo_especial_configuracao.rb (nova)
app/models/configuracao.rb · consolidacao.rb · consolidacao_entrega.rb
app/controllers/consolidacao_entregas_controller.rb
app/javascript/controllers/apontamento_termo_controller.js · validacao_controller.js
app/views/consolidacao_entregas/validar.html.erb · revisar.html.erb
app/views/consolidacoes/show.html.erb
app/services/pdf/relatorio_motorista_pdf.rb
db/seeds.rb · spec/models/configuracao_spec.rb
```
```bash
docker-compose exec app bundle exec rails db:migrate
```
</details>