Adição do filtro de veiculon na parte da consolidação
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user