diff --git a/README.md b/README.md index f0e4e1a..32a5079 100644 --- a/README.md +++ b/README.md @@ -904,7 +904,7 @@ docker-compose exec app bundle exec rspec --- -
+
🆕 Atualização 25/06/2026 — Fechar por veículo na tela de Validar Um motorista pode usar **vários veículos** no período. A tela de Validar (Passo 2) mostrava tudo @@ -942,3 +942,93 @@ app/javascript/controllers/validacao_controller.js # value veiculo, chips, cla
+--- + +
+🆕 Atualização 26/06/2026 — Entrega de termo, caixa de ferramentas, gestão de motoristas e UX da Validação + +Pacote de implantação focado em **agilizar a precificação** e **dar feedback direto** ao usuário no +fluxo de consolidação. Resumo das frentes: + +### 1. 📄 Entrega de termo (entrega sem NF nem código de rastreio) +Lançamento de **termos** entregues por um motorista — não têm nota fiscal nem `tracking_id` para +atrelar, só **motorista + quantidade** a um **preço fixo configurável**. +- Novo pilar `tipo: termo` (enum 5, cor azul) e novo preço **"Entrega de Termo"** editável em + **Admin → Configurações** (entra automático no card, via `CHAVES_MOEDA`). +- Lançado como **uma linha por lote** com a coluna nova **`quantidade`**; `valor_aplicado` guarda o + total do lote (`quantidade × preço`), então `recalcular_motorista!` e todas as somas existentes + seguem corretas. Modal com **stepper − N +** (sem as setinhas nativas do `input number`). +- Aparece na lista de **Apontamentos manuais** (badge "Entrega de Termo ×N"), nos PDFs (extrato, + relatório do motorista e financeiro) e no painel de Resumo — sempre contando por **`quantidade`** + (relatórios passaram de `count` para `sum(:quantidade)`). + +### 2. 🧰 Caixa de ferramentas (toolbox) — botões unificados +- **Passo 2 (Validar):** os botões "Registrar entrega manualmente" e "Entrega de termo" viraram um + único **"➕ Adicionar lançamento ▾"** com menu suspenso. (O antigo "Apontamento 100% manual" foi + renomeado para **"Registrar entrega manualmente"** / modal "Registro manual de entrega".) +- **Passo 1 (Wizard):** o "Apontamento manual" virou **"➕ Adicionar / Ferramentas ▾"** com + **Apontamento manual** + **Adicionar motorista**. +- Reusa um controller Stimulus mínimo `ferramentas_controller.js` (só o dropdown); os modais e + controllers existentes não foram reescritos. + +### 3. 👷 Gestão de motoristas na consolidação +- **Adicionar motorista** a uma consolidação já criada (ou **restaurar** se estava arquivado). O + campo puxa os **motoristas previstos no período** (atendidas, respeitando filtros de veículo/ + operação) com os **veículos que cada um usou** — lista clicável + datalist. +- **Excluir motorista arquivado** (definitivo, **só admin/gerente**) — apaga os lançamentos dele + (ligados por `motorista_nome`, sem cascade) e recalcula o total. Bloqueia se já pago. Arquivar + continua sendo o caminho reversível. +- O **"← Voltar"** do wizard passou a ir para o **resumo da própria consolidação** (não mais a lista). + +### 4. 📊 Resumo e barra de progresso com lançamentos manuais +- Painel **"📊 Resumo"** (Passo 2) ganhou linha **Termo** e linha **"Apontamentos manuais: N"**. +- **Barra de progresso** com **2 segmentos**: laranja→verde (elegíveis classificadas) + **azul** + (lançamentos manuais), com texto "· +N manuais". O gate de finalização **não mudou** + (`classificadas_count` segue `manual: false`) — é feedback visual e entra no valor. +- "Manuais" conta como **entregas**: cada termo vale sua `quantidade`; cada apontamento manual vale + 1 por nota (`tracking_id`). + +### 5. 🧊 UX da tela de Validar +- **Cabeçalho congelado** (no desktop): header, barra de progresso, filtro por veículo, ações em + massa e o botão de lançamento ficam fixos; **só a lista de NFs rola** (layout flex-column com a + coluna da lista `overflow-y-auto`). Evitou-se `sticky`/`z-index` para não prender os modais + (`fixed z-50`) atrás da sidebar (`z-40`). +- **Ações em massa simplificadas**: removidos o botão gigante **"Marcar todos como Normal"** e o + checkbox **"Modo remover"**. Os botões de pilar em **"Aplicar nos selecionados"** agora são + **toggle em massa** — aplicam o pilar nos selecionados e, se **todos** já o têm, removem de todos. + +### ⚙️ Como funciona (técnico) +- **Migrations** (rodar `db:migrate`): + - `20260626000001_add_quantidade_to_consolidacao_entregas` — `quantidade` (default 1). + - `20260626000002_add_preco_termo_configuracao` — cria a config `preco_termo` (idempotente). +- `Consolidacao#adicionar_termos!(motorista:, quantidade:, user:)` — uma linha `TERMO-`, + `manual: true`. `Configuracao.preco_termo` + `ConsolidacaoEntrega.valor_para('termo')`. +- `ConsolidacoesController#adicionar_motorista` / `#excluir_motorista` (member) + + `motoristas_previstos_no_periodo`. `ConsolidacaoEntregasController#apontar_termo`, `@manuais`, + `contar_manuais`, `por_tipo` agora `sum(:quantidade)`. +- Stimulus novos: `apontamento_termo_controller.js`, `ferramentas_controller.js`, + `adicionar_motorista_controller.js`. `validacao_controller.js`: barra com 2 segmentos, linhas + Termo/Manuais e **toggle em massa** (`pilarAtivo`); removidos `marcarTodos`/`modoRemover`. + +### 📂 Principais arquivos +``` +db/migrate/20260626000001_add_quantidade_to_consolidacao_entregas.rb +db/migrate/20260626000002_add_preco_termo_configuracao.rb +app/models/configuracao.rb · consolidacao.rb · consolidacao_entrega.rb +app/controllers/consolidacoes_controller.rb · consolidacao_entregas_controller.rb +app/javascript/controllers/apontamento_termo_controller.js (novo) +app/javascript/controllers/ferramentas_controller.js (novo) +app/javascript/controllers/adicionar_motorista_controller.js (novo) +app/javascript/controllers/validacao_controller.js +app/views/consolidacoes/wizard.html.erb · show.html.erb +app/views/consolidacao_entregas/validar.html.erb · revisar.html.erb +app/services/pdf/extrato_pdf.rb · relatorio_motorista_pdf.rb · relatorio_financeiro_consolidacao_pdf.rb +config/routes.rb · db/seeds.rb +``` + +```bash +docker-compose exec app bundle exec rails db:migrate +``` + +
+