Melhorias gerais descritas no READ.me

This commit is contained in:
2026-06-26 11:30:35 -03:00
parent 1ca5fc67d7
commit 1ad1d4c143
8 changed files with 198 additions and 23 deletions

View File

@@ -0,0 +1,23 @@
// app/javascript/controllers/adicionar_motorista_controller.js
// Stimulus — modal "Adicionar motorista" no Passo 1. Só abre/fecha o modal; o
// formulário em si submete normalmente (Turbo), redirecionando de volta ao wizard.
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["modal", "input"]
abrir() {
this.modalTarget.classList.remove("hidden")
if (this.hasInputTarget) this.inputTarget.focus()
}
fechar() {
this.modalTarget.classList.add("hidden")
}
// Fecha ao clicar no fundo (fora do card)
fundo(event) {
if (event.target === this.modalTarget) this.fechar()
}
}

View File

@@ -7,9 +7,10 @@ import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = [
"linha", "checkbox", "selecionarTodos", "modoRemover", "rotuloAcao",
"toggles", "barra", "percentual", "chipVeiculo",
"contadorClassificadas", "contadorTotal",
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria", "valorTotal"
"toggles", "barra", "barraManuais", "percentual", "chipVeiculo",
"contadorClassificadas", "contadorTotal", "contadorManuais", "manuaisInfo",
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria",
"qtdTermo", "qtdManuais", "valorTotal"
]
static values = {
@@ -181,20 +182,36 @@ export default class extends Controller {
this.qtdDescontoTarget.textContent = porTipo["desconto"] || 0
if (this.hasQtdExtraordinariaTarget)
this.qtdExtraordinariaTarget.textContent = porTipo["extraordinaria"] || 0
if (this.hasQtdTermoTarget)
this.qtdTermoTarget.textContent = porTipo["termo"] || 0
const valor = dados.valor_total || 0
this.valorTotalTarget.textContent =
"R$ " + valor.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
// Lançamentos manuais do motorista (apontamentos + termo): feedback visual.
// Ficam fora do denominador de elegíveis (o gate de finalização não muda).
const manuais = dados.manuais || 0
if (this.hasQtdManuaisTarget) this.qtdManuaisTarget.textContent = manuais
if (this.hasContadorManuaisTarget) this.contadorManuaisTarget.textContent = manuais
if (this.hasManuaisInfoTarget) this.manuaisInfoTarget.classList.toggle("hidden", manuais <= 0)
// Barra/contador refletem o ESCOPO atual (veículo selecionado, se houver).
const classificadas = (dados.classificadas_escopo ?? dados.classificadas) || 0
this.contadorClassificadasTarget.textContent = classificadas
const total = this.totalValue || parseInt(this.contadorTotalTarget.textContent)
const pct = total > 0 ? Math.round((classificadas / total) * 100) : 0
this.barraTarget.style.width = `${Math.min(pct, 100)}%`
this.percentualTarget.textContent = `${Math.min(pct, 100)}%`
// Barra com 2 segmentos, proporcionais ao total geral (elegíveis + manuais):
// laranja/verde = elegíveis classificadas · azul = lançamentos manuais.
const denom = total + manuais
this.barraTarget.style.width = denom > 0 ? `${(classificadas / denom) * 100}%` : "0%"
if (this.hasBarraManuaisTarget)
this.barraManuaisTarget.style.width = denom > 0 ? `${(manuais / denom) * 100}%` : "0%"
// Cor do segmento elegível: verde quando todas as elegíveis estão classificadas.
this.barraTarget.classList.toggle("bg-green-500", pct >= 100)
this.barraTarget.classList.toggle("bg-orange-500", pct < 100)