teste #7
59
README.md
59
README.md
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user