Correção Dash board e implantação Relaório de ADM
This commit is contained in:
@@ -9,14 +9,15 @@ export default class extends Controller {
|
||||
"linha", "checkbox", "selecionarTodos", "modoRemover", "rotuloAcao",
|
||||
"toggles", "barra", "percentual",
|
||||
"contadorClassificadas", "contadorTotal",
|
||||
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "valorTotal"
|
||||
"qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria", "valorTotal"
|
||||
]
|
||||
|
||||
static values = {
|
||||
url: String, // POST classificar
|
||||
massaUrl: String, // POST classificar_em_massa
|
||||
motorista: String,
|
||||
total: Number
|
||||
url: String, // POST classificar
|
||||
massaUrl: String, // POST classificar_em_massa
|
||||
motorista: String,
|
||||
total: Number,
|
||||
precoExtraordinaria: Number // preço padrão sugerido no prompt
|
||||
}
|
||||
|
||||
connect() {
|
||||
@@ -34,12 +35,21 @@ export default class extends Controller {
|
||||
const tracking = btn.dataset.tracking
|
||||
const tipo = btn.dataset.tipo
|
||||
|
||||
// Pilar extraordinária: ao ATIVAR (botão ainda sem ring-2), pergunta o valor.
|
||||
const ativando = !btn.classList.contains("ring-2")
|
||||
let valor = null
|
||||
if (tipo === "extraordinaria" && ativando) {
|
||||
valor = this.pedirValor()
|
||||
if (valor === null) return // admin cancelou
|
||||
}
|
||||
|
||||
btn.disabled = true
|
||||
try {
|
||||
const resp = await this.post(this.urlValue, {
|
||||
tracking_id: tracking,
|
||||
tipo: tipo,
|
||||
motorista: this.motoristaValue
|
||||
motorista: this.motoristaValue,
|
||||
valor: valor
|
||||
})
|
||||
// resp.ativo indica se o pilar ficou ligado ou desligado (toggle)
|
||||
this.setToggle(tracking, tipo, resp.ativo)
|
||||
@@ -58,11 +68,18 @@ export default class extends Controller {
|
||||
const verbo = remover ? "REMOVER de TODAS as entregas" : "Marcar TODAS as entregas como"
|
||||
if (!confirm(`${verbo} ${this.labelTipo(tipo)}?`)) return
|
||||
|
||||
let valor = null
|
||||
if (tipo === "extraordinaria" && !remover) {
|
||||
valor = this.pedirValor()
|
||||
if (valor === null) return
|
||||
}
|
||||
|
||||
const resp = await this.post(this.massaUrlValue, {
|
||||
tipo: tipo,
|
||||
motorista: this.motoristaValue,
|
||||
tracking_ids: [], // vazio = todas
|
||||
acao: remover ? "remover" : "adicionar"
|
||||
acao: remover ? "remover" : "adicionar",
|
||||
valor: valor
|
||||
})
|
||||
this.linhaTargets.forEach(l => this.setToggle(l.dataset.tracking, tipo, !remover))
|
||||
this.atualizarResumo(resp)
|
||||
@@ -97,11 +114,19 @@ export default class extends Controller {
|
||||
}
|
||||
|
||||
const remover = this.modoRemover
|
||||
|
||||
let valor = null
|
||||
if (tipo === "extraordinaria" && !remover) {
|
||||
valor = this.pedirValor()
|
||||
if (valor === null) return
|
||||
}
|
||||
|
||||
const resp = await this.post(this.massaUrlValue, {
|
||||
tipo: tipo,
|
||||
motorista: this.motoristaValue,
|
||||
tracking_ids: ids,
|
||||
acao: remover ? "remover" : "adicionar"
|
||||
acao: remover ? "remover" : "adicionar",
|
||||
valor: valor
|
||||
})
|
||||
ids.forEach(id => this.setToggle(id, tipo, !remover))
|
||||
this.checkboxTargets.forEach(c => c.checked = false)
|
||||
@@ -150,6 +175,8 @@ export default class extends Controller {
|
||||
this.qtdRetiradaTarget.textContent = porTipo["retirada"] || 0
|
||||
this.qtdBonusTarget.textContent = porTipo["bonus"] || 0
|
||||
this.qtdDescontoTarget.textContent = porTipo["desconto"] || 0
|
||||
if (this.hasQtdExtraordinariaTarget)
|
||||
this.qtdExtraordinariaTarget.textContent = porTipo["extraordinaria"] || 0
|
||||
|
||||
const valor = dados.valor_total || 0
|
||||
this.valorTotalTarget.textContent =
|
||||
@@ -171,6 +198,21 @@ export default class extends Controller {
|
||||
|
||||
labelTipo(tipo) {
|
||||
return { entrega_normal: "Normal", retirada: "Retirada",
|
||||
bonus: "Bônus", desconto: "Desconto" }[tipo] || tipo
|
||||
bonus: "Bônus", desconto: "Desconto",
|
||||
extraordinaria: "Extraordinária" }[tipo] || tipo
|
||||
}
|
||||
|
||||
// Pergunta o valor da entrega extraordinária (pré-preenchido com o padrão).
|
||||
// Retorna o número (>= 0) ou null se o admin cancelar.
|
||||
pedirValor() {
|
||||
const padrao = (this.precoExtraordinariaValue || 0).toFixed(2).replace(".", ",")
|
||||
const entrada = prompt("Valor desta entrega extraordinária (R$):", padrao)
|
||||
if (entrada === null) return null
|
||||
const num = parseFloat(entrada.replace(",", "."))
|
||||
if (isNaN(num) || num < 0) {
|
||||
alert("Valor inválido. Informe um número maior ou igual a zero.")
|
||||
return null
|
||||
}
|
||||
return num
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user