Adição de mais um preço 'Termo especial'

This commit is contained in:
2026-07-15 16:27:20 -03:00
parent e129e991e4
commit 5af51534be
13 changed files with 158 additions and 62 deletions

View File

@@ -1,17 +1,18 @@
// app/javascript/controllers/apontamento_termo_controller.js
// Stimulus — Entrega de termo. Lança um lote de N termos para o motorista da tela.
// Entrega sem NF nem código de rastreio: só a quantidade (stepper N +), a um
// preço fixo configurável.
// Stimulus — Entrega de termo. Lança lotes de termos (normal e/ou especial) para
// o motorista da tela. Entrega sem NF nem código de rastreio: só as quantidades
// (um stepper N + por tipo), cada tipo a um preço fixo configurável.
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["modal", "quantidade", "erro", "veiculo"]
static targets = ["modal", "quantidade", "quantidadeEspecial", "erro", "veiculo"]
static values = { apontarTermoUrl: String, motorista: String }
abrir() {
this.erroTarget.classList.add("hidden")
this.quantidadeTarget.value = "1"
this.quantidadeEspecialTarget.value = "0"
this.modalTarget.classList.remove("hidden")
}
@@ -24,26 +25,39 @@ export default class extends Controller {
if (event.target === this.modalTarget) this.fechar()
}
// Stepper
// Steppers (mínimo 0 em ambos; o envio exige ao menos 1 no total)
mais() {
this.quantidadeTarget.value = String(this.qtdAtual() + 1)
this.quantidadeTarget.value = String(this.qtdAtual(this.quantidadeTarget) + 1)
}
menos() {
this.quantidadeTarget.value = String(Math.max(1, this.qtdAtual() - 1))
this.quantidadeTarget.value = String(Math.max(0, this.qtdAtual(this.quantidadeTarget) - 1))
}
qtdAtual() {
const n = parseInt(this.quantidadeTarget.value, 10)
return Number.isFinite(n) && n > 0 ? n : 1
maisEspecial() {
this.quantidadeEspecialTarget.value = String(this.qtdAtual(this.quantidadeEspecialTarget) + 1)
}
menosEspecial() {
this.quantidadeEspecialTarget.value = String(Math.max(0, this.qtdAtual(this.quantidadeEspecialTarget) - 1))
}
qtdAtual(alvo) {
const n = parseInt(alvo.value, 10)
return Number.isFinite(n) && n > 0 ? n : 0
}
async adicionar(event) {
event?.preventDefault()
const quantidade = this.qtdAtual()
const motorista = this.motoristaValue.trim()
const quantidade = this.qtdAtual(this.quantidadeTarget)
const quantidadeEspecial = this.qtdAtual(this.quantidadeEspecialTarget)
const motorista = this.motoristaValue.trim()
if (!motorista) { this.mostrarErro("Motorista não identificado."); return }
if (quantidade + quantidadeEspecial < 1) {
this.mostrarErro("Informe ao menos um termo (normal ou especial).")
return
}
const btn = event.currentTarget
btn.disabled = true
@@ -56,9 +70,10 @@ export default class extends Controller {
"X-CSRF-Token": document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify({
motorista: motorista,
quantidade: quantidade,
vehicle: this.hasVeiculoTarget ? this.veiculoTarget.value : ""
motorista: motorista,
quantidade: quantidade,
quantidade_especial: quantidadeEspecial,
vehicle: this.hasVeiculoTarget ? this.veiculoTarget.value : ""
})
})
const data = await resp.json()