Adição do filtro de veiculon na parte da consolidação

This commit is contained in:
2026-06-25 12:33:17 -03:00
parent 0c5b5bcbe6
commit f42949db78
5 changed files with 197 additions and 22 deletions

View File

@@ -7,7 +7,7 @@ import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = [
"linha", "checkbox", "selecionarTodos", "modoRemover", "rotuloAcao",
"toggles", "barra", "percentual",
"toggles", "barra", "percentual", "chipVeiculo",
"contadorClassificadas", "contadorTotal",
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria", "valorTotal"
]
@@ -17,6 +17,7 @@ export default class extends Controller {
massaUrl: String, // POST classificar_em_massa
motorista: String,
total: Number,
veiculo: String, // veículo selecionado (filtro "fechar por carro")
precoExtraordinaria: Number // preço padrão sugerido no prompt
}
@@ -49,6 +50,7 @@ export default class extends Controller {
tracking_id: tracking,
tipo: tipo,
motorista: this.motoristaValue,
vehicle: this.veiculoValue,
valor: valor
})
// resp.ativo indica se o pilar ficou ligado ou desligado (toggle)
@@ -77,7 +79,8 @@ export default class extends Controller {
const resp = await this.post(this.massaUrlValue, {
tipo: tipo,
motorista: this.motoristaValue,
tracking_ids: [], // vazio = todas
vehicle: this.veiculoValue,
tracking_ids: [], // vazio = todas (do veículo selecionado, se houver)
acao: remover ? "remover" : "adicionar",
valor: valor
})
@@ -124,6 +127,7 @@ export default class extends Controller {
const resp = await this.post(this.massaUrlValue, {
tipo: tipo,
motorista: this.motoristaValue,
vehicle: this.veiculoValue,
tracking_ids: ids,
acao: remover ? "remover" : "adicionar",
valor: valor
@@ -182,7 +186,8 @@ export default class extends Controller {
this.valorTotalTarget.textContent =
"R$ " + valor.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 })
const classificadas = dados.classificadas || 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)
@@ -190,10 +195,43 @@ export default class extends Controller {
this.barraTarget.style.width = `${Math.min(pct, 100)}%`
this.percentualTarget.textContent = `${Math.min(pct, 100)}%`
if (pct >= 100) {
this.barraTarget.classList.remove("bg-orange-500")
this.barraTarget.classList.add("bg-green-500")
}
this.barraTarget.classList.toggle("bg-green-500", pct >= 100)
this.barraTarget.classList.toggle("bg-orange-500", pct < 100)
if (dados.veiculos_status) this.atualizarChips(dados.veiculos_status)
}
// Atualiza os chips "fechar por veículo" (contador + estado fechado) a partir
// do status devolvido pelo servidor.
atualizarChips(status) {
if (!this.hasChipVeiculoTarget) return
const porVeiculo = {}
status.forEach(v => { porVeiculo[v.vehicle] = v })
const VERDE = ["border-green-500", "text-green-400", "bg-green-500/10"]
const LARANJA = ["border-orange-500", "text-orange-400", "bg-orange-500/10"]
const NEUTRO = ["border-[#2a2a2a]", "text-gray-300"]
this.chipVeiculoTargets.forEach(chip => {
const dados = porVeiculo[chip.dataset.vehicle]
if (!dados) return
const feito = chip.querySelector("[data-chip-feito]")
const total = chip.querySelector("[data-chip-total]")
const check = chip.querySelector("[data-chip-check]")
if (feito) feito.textContent = dados.classificadas
if (total) total.textContent = dados.eligible
if (check) check.textContent = dados.fechado ? "✓" : ""
// Estado de cor determinístico: verde (fechado) > laranja (selecionado) > neutro.
chip.classList.remove(...VERDE, ...LARANJA, ...NEUTRO)
if (dados.fechado) {
chip.classList.add(...VERDE)
} else if (chip.dataset.vehicle === this.veiculoValue) {
chip.classList.add(...LARANJA)
} else {
chip.classList.add(...NEUTRO)
}
})
}
labelTipo(tipo) {