From eca6df39ebe47790158e1ed3d4af3a3cd9497b8fd2c033e57640aba4fcd929cb Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 3 Jul 2026 09:58:59 -0300 Subject: [PATCH] =?UTF-8?q?Grande=20corre=C3=A7=C3=A3o=20do=20filtro=20de?= =?UTF-8?q?=20veiculos=20na=20area=20de=20consolida=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Imagens para correção /Imagem colada (2).png | Bin 0 -> 147020 bytes .../consolidacao_entregas_controller.rb | 115 +++++++++++++++++- app/controllers/consolidacoes_controller.rb | 19 ++- .../apontamento_manual_controller.js | 5 +- .../apontamento_termo_controller.js | 8 +- .../controllers/validacao_controller.js | 43 +++++-- app/models/consolidacao.rb | 92 +++++++++++--- app/models/consolidacao_veiculo.rb | 71 +++++++++++ .../consolidacao_entregas/validar.html.erb | 86 +++++++++++-- app/views/consolidacoes/show.html.erb | 12 ++ app/views/consolidacoes/wizard.html.erb | 7 ++ config/routes.rb | 4 + ...01_add_vehicle_to_consolidacao_entregas.rb | 38 ++++++ ...0703000002_create_consolidacao_veiculos.rb | 61 ++++++++++ spec/factories.rb | 6 + spec/models/consolidacao_spec.rb | 81 ++++++++++++ spec/models/consolidacao_veiculo_spec.rb | 74 +++++++++++ 17 files changed, 681 insertions(+), 41 deletions(-) create mode 100644 Imagens para correção /Imagem colada (2).png create mode 100644 app/models/consolidacao_veiculo.rb create mode 100644 db/migrate/20260703000001_add_vehicle_to_consolidacao_entregas.rb create mode 100644 db/migrate/20260703000002_create_consolidacao_veiculos.rb create mode 100644 spec/models/consolidacao_veiculo_spec.rb diff --git a/Imagens para correção /Imagem colada (2).png b/Imagens para correção /Imagem colada (2).png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..691e54aeb04f4710e029a21b39959d9645145444a35b26665f9f07c9ac75e94e GIT binary patch literal 147020 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⁣+fcM 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

-yK5=FT~U} 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 literal 0 HcmV?d00001 diff --git a/app/controllers/consolidacao_entregas_controller.rb b/app/controllers/consolidacao_entregas_controller.rb index c0c4742..fa19d7d 100644 --- a/app/controllers/consolidacao_entregas_controller.rb +++ b/app/controllers/consolidacao_entregas_controller.rb @@ -88,6 +88,7 @@ class ConsolidacaoEntregasController < ApplicationController motorista_nome: params[:motorista], tipo: params[:tipo], valor_aplicado: valor_classificacao(params[:tipo]), + vehicle: veiculo_do_tracking(params[:tracking_id]), # snapshot p/ fechar por veículo created_by: current_user.id ) ativo = true @@ -132,11 +133,13 @@ class ConsolidacaoEntregasController < ApplicationController .destroy_all else # ADICIONA o pilar às entregas (não remove os demais já marcados). - valor = valor_classificacao(tipo) + valor = valor_classificacao(tipo) + veiculos = veiculos_dos_trackings(tracking_ids) # tracking_id => vehicle (snapshot) tracking_ids.each do |tid| ce = @consolidacao.consolidacao_entregas.find_or_initialize_by(tracking_id: tid, tipo: tipo) ce.assign_attributes(motorista_nome: motorista, valor_aplicado: valor, created_by: current_user.id) + ce.vehicle = veiculos[tid] if ce.vehicle.blank? ce.save! end end @@ -246,6 +249,7 @@ class ConsolidacaoEntregasController < ApplicationController nf: params[:nf], obs: params[:obs], valor_extra: valor_extraordinaria_param, + vehicle: params[:vehicle], # veículo escolhido no lançamento (Q3) user: current_user ) auditar!(:editar, @consolidacao, @@ -271,6 +275,7 @@ class ConsolidacaoEntregasController < ApplicationController motorista = @consolidacao.adicionar_termos!( motorista: params[:motorista].to_s.strip, quantidade: params[:quantidade], + vehicle: params[:vehicle], # veículo escolhido no lançamento (Q3) user: current_user ) auditar!(:editar, @consolidacao, @@ -315,12 +320,104 @@ class ConsolidacaoEntregasController < ApplicationController end end + # POST /consolidacoes/:consolidacao_id/consolidacao_entregas/fechar_veiculo + # Consolida (fecha) UM veículo do motorista. Exige que o veículo esteja 100% + # classificado. O pagamento continua sendo por motorista (não é pago aqui). + def fechar_veiculo + authorize @consolidacao, :update? + motorista = params[:motorista] + veiculo = params[:vehicle].to_s + return render_veiculo_erro('Veículo/motorista inválido.') unless motorista_na_consolidacao?(motorista) && veiculo.present? + + status = veiculos_status(motorista).find { |v| v[:vehicle] == veiculo } + return render_veiculo_erro('Classifique todas as entregas deste veículo antes de consolidar.') if status && !status[:completo] + + cv = @consolidacao.consolidacao_veiculos.find_or_create_by!(motorista_nome: motorista, vehicle: veiculo) + cv.fechar!(current_user) + auditar!(:editar, @consolidacao, dados_novos: { fechar_veiculo: veiculo, motorista: motorista }) + + responder_veiculo(motorista, "Veículo #{veiculo} consolidado.") + end + + # POST .../reabrir_veiculo — reabre um veículo já consolidado (reversível). + def reabrir_veiculo + authorize @consolidacao, :update? + motorista = params[:motorista] + cv = @consolidacao.consolidacao_veiculos.find_by(motorista_nome: motorista, vehicle: params[:vehicle].to_s) + return render_veiculo_erro('Veículo não encontrado.') unless cv + + cv.reabrir!(current_user) + auditar!(:editar, @consolidacao, dados_novos: { reabrir_veiculo: cv.vehicle, motorista: motorista }) + responder_veiculo(motorista, "Veículo #{cv.vehicle} reaberto.") + end + + # POST .../arquivar_veiculo — tira um veículo do gate de finalização (reversível). + # As entregas já classificadas dele continuam somando no pagamento do motorista. + def arquivar_veiculo + authorize @consolidacao, :update? + motorista = params[:motorista] + veiculo = params[:vehicle].to_s + return render_veiculo_erro('Veículo/motorista inválido.') unless motorista_na_consolidacao?(motorista) && veiculo.present? + + cv = @consolidacao.consolidacao_veiculos.find_or_create_by!(motorista_nome: motorista, vehicle: veiculo) + cv.arquivar!(current_user) + auditar!(:editar, @consolidacao, dados_novos: { arquivar_veiculo: veiculo, motorista: motorista }) + responder_veiculo(motorista, "Veículo #{veiculo} arquivado — fora da finalização.") + end + + # POST .../desarquivar_veiculo — restaura um veículo arquivado. + def desarquivar_veiculo + authorize @consolidacao, :update? + motorista = params[:motorista] + cv = @consolidacao.consolidacao_veiculos.find_by(motorista_nome: motorista, vehicle: params[:vehicle].to_s) + return render_veiculo_erro('Veículo não encontrado.') unless cv + + cv.desarquivar!(current_user) + auditar!(:editar, @consolidacao, dados_novos: { desarquivar_veiculo: cv.vehicle, motorista: motorista }) + responder_veiculo(motorista, "Veículo #{cv.vehicle} restaurado.") + end + private def set_consolidacao @consolidacao = Consolidacao.find(params[:consolidacao_id]) end + # Resposta padrão das ações de veículo: JSON com o resumo atualizado (barra + + # chips com o novo estado) ou redirect de volta pra tela de validação. + def responder_veiculo(motorista, aviso) + respond_to do |format| + format.json { render json: resumo_json(motorista, vehicles: params[:vehicle_sel]) } + format.html do + redirect_to validar_consolidacao_consolidacao_entregas_path( + @consolidacao, motorista: motorista, vehicle: veiculos_param(params[:vehicle_sel]).presence + ), notice: aviso + end + end + end + + def render_veiculo_erro(msg) + respond_to do |format| + format.json { render json: { ok: false, erro: msg }, status: :unprocessable_entity } + format.html do + redirect_to validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: params[:motorista]), + alert: msg + end + end + end + + # Veículo (snapshot da rastreio) de UM tracking_id. nil para sintéticos. + def veiculo_do_tracking(tracking_id) + Entrega.da_conta_gade.find_by(tracking_id: tracking_id)&.vehicle + end + + # Mapa tracking_id => vehicle para um lote (uma query só). + def veiculos_dos_trackings(ids) + return {} if ids.blank? + + Entrega.da_conta_gade.where(tracking_id: ids).pluck(:tracking_id, :vehicle).to_h + end + def bloquear_se_finalizada return unless @consolidacao.finalizada? && current_user.operador? redirect_to @consolidacao, alert: 'Consolidação finalizada — apenas admin/gerente podem editar.' @@ -367,6 +464,11 @@ class ConsolidacaoEntregasController < ApplicationController # { vehicle:, eligible:, classificadas:, fechado: }. Fonte única do filtro de # carros e do acompanhamento (chips). 2 queries: elegíveis (com a coluna do # veículo) e as já classificadas (não-manuais). + # Status por veículo do motorista: { vehicle, eligible, classificadas, completo, + # fechado, arquivado }. `completo` = 100% classificado (verde, pode consolidar); + # `fechado` = veículo consolidado (cadeado, vem de consolidacao_veiculos); + # `arquivado` = fora do gate. Une os veículos com entregas elegíveis (rastreio) + # com os que só existem como linha de consolidacao_veiculos (arquivados/manuais). def veiculos_status(motorista) return [] unless motorista.present? @@ -380,12 +482,17 @@ class ConsolidacaoEntregasController < ApplicationController classificadas = @consolidacao.consolidacao_entregas .where(motorista_nome: motorista, manual: false) .distinct.pluck(:tracking_id).to_set + estados = @consolidacao.consolidacao_veiculos.where(motorista_nome: motorista).index_by(&:vehicle) - por_veiculo.map do |veiculo, linhas| - ids = linhas.map(&:first) + veiculos = (por_veiculo.keys + estados.keys).uniq + veiculos.map do |veiculo| + ids = (por_veiculo[veiculo] || []).map(&:first) feito = ids.count { |id| classificadas.include?(id) } + cv = estados[veiculo] { vehicle: veiculo, eligible: ids.size, classificadas: feito, - fechado: ids.size.positive? && feito >= ids.size } + completo: ids.size.positive? && feito >= ids.size, + fechado: cv&.fechado? || false, + arquivado: cv&.arquivado? || false } end.sort_by { |v| v[:vehicle] } end diff --git a/app/controllers/consolidacoes_controller.rb b/app/controllers/consolidacoes_controller.rb index 2aad23c..40e3899 100644 --- a/app/controllers/consolidacoes_controller.rb +++ b/app/controllers/consolidacoes_controller.rb @@ -159,6 +159,10 @@ class ConsolidacoesController < ApplicationController @apontamentos = @consolidacao.consolidacao_entregas.apontamentos .order(:motorista_nome, :tracking_id) .group_by { |ce| [ce.motorista_nome, ce.tracking_id] } + # Veículos consolidados por motorista (breakdown informativo no card). + @veiculos_por_motorista = @consolidacao.consolidacao_veiculos.ativos + .order(:vehicle) + .group_by(&:motorista_nome) end # GET /consolidacoes/:id/wizard — PASSO 1: selecionar motorista @@ -177,14 +181,20 @@ class ConsolidacoesController < ApplicationController .apontamentos .where(motorista_nome: cm.motorista_nome) .distinct.count(:tracking_id) + # Status por veículo (para o breakdown do card) e estado de fechamento. + veiculos = @consolidacao.consolidacao_veiculos.ativos + .where(motorista_nome: cm.motorista_nome) + .order(:vehicle) { registro: cm, total: total, classificadas: classificadas, apontamentos: apontamentos, - # Espelha o gate do servidor (todas_entregas_classificadas?): um motorista - # só com apontamento manual tem 0 entregas elegíveis e já está "completo". - completo: total.zero? || classificadas >= total + veiculos: veiculos, + veiculos_fechados: veiculos.count(&:fechado?), + # Espelha o gate do servidor (todas_entregas_classificadas?): exige tudo + # classificado E todos os veículos ativos fechados (consolidados). + completo: @consolidacao.motorista_completo?(cm.motorista_nome) } end end @@ -199,7 +209,7 @@ class ConsolidacoesController < ApplicationController redirect_to @consolidacao, notice: 'Consolidação finalizada! Motoristas notificados.' else redirect_to wizard_consolidacao_path(@consolidacao), - alert: 'Não é possível finalizar: existem entregas não classificadas.' + alert: 'Não é possível finalizar: ainda há entregas não classificadas. Classifique-as ou arquive o veículo pendente.' end end @@ -320,6 +330,7 @@ class ConsolidacoesController < ApplicationController nome = cm.motorista_nome ActiveRecord::Base.transaction do @consolidacao.consolidacao_entregas.where(motorista_nome: nome).delete_all + @consolidacao.consolidacao_veiculos.where(motorista_nome: nome).delete_all cm.destroy! end # cm já não existe — atualiza o total da consolidação direto (soma dos ativos). diff --git a/app/javascript/controllers/apontamento_manual_controller.js b/app/javascript/controllers/apontamento_manual_controller.js index 36c3910..6dd0e51 100644 --- a/app/javascript/controllers/apontamento_manual_controller.js +++ b/app/javascript/controllers/apontamento_manual_controller.js @@ -7,7 +7,7 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { - static targets = ["modal", "motorista", "nf", "obs", "erro", "tipoCheck", "valorExtra"] + static targets = ["modal", "motorista", "nf", "obs", "erro", "tipoCheck", "valorExtra", "veiculo"] static values = { apontarManualUrl: String } abrir() { @@ -52,7 +52,8 @@ export default class extends Controller { nf: this.nfTarget.value.trim(), obs: this.obsTarget.value.trim(), tipos: tipos, - valor: valor + valor: valor, + vehicle: this.hasVeiculoTarget ? this.veiculoTarget.value : "" }) }) const data = await resp.json() diff --git a/app/javascript/controllers/apontamento_termo_controller.js b/app/javascript/controllers/apontamento_termo_controller.js index aea439d..260bd55 100644 --- a/app/javascript/controllers/apontamento_termo_controller.js +++ b/app/javascript/controllers/apontamento_termo_controller.js @@ -6,7 +6,7 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { - static targets = ["modal", "quantidade", "erro"] + static targets = ["modal", "quantidade", "erro", "veiculo"] static values = { apontarTermoUrl: String, motorista: String } abrir() { @@ -55,7 +55,11 @@ export default class extends Controller { "Accept": "application/json", "X-CSRF-Token": document.querySelector('meta[name="csrf-token"]').content }, - body: JSON.stringify({ motorista: motorista, quantidade: quantidade }) + body: JSON.stringify({ + motorista: motorista, + quantidade: quantidade, + vehicle: this.hasVeiculoTarget ? this.veiculoTarget.value : "" + }) }) const data = await resp.json() if (!resp.ok || data.ok === false) { diff --git a/app/javascript/controllers/validacao_controller.js b/app/javascript/controllers/validacao_controller.js index aab3bc9..a8c3c79 100644 --- a/app/javascript/controllers/validacao_controller.js +++ b/app/javascript/controllers/validacao_controller.js @@ -9,6 +9,7 @@ export default class extends Controller { "linha", "checkbox", "selecionarTodos", "busca", "buscaVazia", "resumo", "listaCol", "btnResumoLabel", "toggles", "barra", "barraManuais", "percentual", "chipVeiculo", + "consolidarBtn", "consolidarHint", "contadorClassificadas", "contadorTotal", "contadorManuais", "manuaisInfo", "qtdNormal", "qtdRetirada", "qtdBonus", "qtdDesconto", "qtdExtraordinaria", "qtdTermo", "qtdManuais", "valorTotal" @@ -217,6 +218,23 @@ export default class extends Controller { this.barraTarget.classList.toggle("bg-green-500", pct >= 100) this.barraTarget.classList.toggle("bg-orange-500", pct < 100) + // Botão "Consolidar este veículo" (só existe quando UM veículo está + // selecionado e ainda não fechado): habilita quando o escopo chega a 100%. + if (this.hasConsolidarBtnTarget) { + const pronto = pct >= 100 + this.consolidarBtnTarget.disabled = !pronto + this.consolidarBtnTarget.classList.toggle("bg-green-600", pronto) + this.consolidarBtnTarget.classList.toggle("hover:bg-green-500", pronto) + this.consolidarBtnTarget.classList.toggle("text-white", pronto) + this.consolidarBtnTarget.classList.toggle("cursor-pointer", pronto) + this.consolidarBtnTarget.classList.toggle("bg-[#2a2a2a]", !pronto) + this.consolidarBtnTarget.classList.toggle("text-gray-600", !pronto) + this.consolidarBtnTarget.classList.toggle("cursor-not-allowed", !pronto) + if (this.hasConsolidarHintTarget) + this.consolidarHintTarget.textContent = + pronto ? "Pronto para consolidar." : "Classifique 100% deste veículo para consolidar." + } + if (dados.veiculos_status) this.atualizarChips(dados.veiculos_status) } @@ -227,9 +245,12 @@ export default class extends Controller { 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"] + const LARANJA = ["border-orange-500", "text-orange-400", "bg-orange-500/10"] + const VERDE_FECHADO = ["border-green-500", "text-green-400", "bg-green-500/10"] + const VERDE_PRONTO = ["border-green-600/50", "text-green-400"] + const ARQUIVADO = ["border-dashed", "border-[#3a3a3a]", "text-gray-500"] + const NEUTRO = ["border-[#2a2a2a]", "text-gray-300"] + const TODAS = [...LARANJA, ...VERDE_FECHADO, ...VERDE_PRONTO, ...ARQUIVADO, ...NEUTRO] this.chipVeiculoTargets.forEach(chip => { const dados = porVeiculo[chip.dataset.vehicle] @@ -237,17 +258,23 @@ export default class extends Controller { const feito = chip.querySelector("[data-chip-feito]") const total = chip.querySelector("[data-chip-total]") const check = chip.querySelector("[data-chip-check]") + const lock = chip.querySelector("[data-chip-lock]") if (feito) feito.textContent = dados.classificadas if (total) total.textContent = dados.eligible - if (check) check.textContent = dados.fechado ? "✓" : "" + if (check) check.textContent = dados.completo ? "✓" : "" + if (lock) lock.classList.toggle("hidden", !dados.fechado) - // Estado de cor determinístico: laranja (selecionado) > verde (fechado) > neutro. - // Seleção tem prioridade para o usuário sempre enxergar quais carros somam. - chip.classList.remove(...VERDE, ...LARANJA, ...NEUTRO) + // Cor determinística: selecionado(laranja) > consolidado(verde+🔒) > + // pronto(verde) > arquivado(cinza) > neutro. + chip.classList.remove(...TODAS) if (this.veiculosValue.includes(chip.dataset.vehicle)) { chip.classList.add(...LARANJA) } else if (dados.fechado) { - chip.classList.add(...VERDE) + chip.classList.add(...VERDE_FECHADO) + } else if (dados.completo) { + chip.classList.add(...VERDE_PRONTO) + } else if (dados.arquivado) { + chip.classList.add(...ARQUIVADO) } else { chip.classList.add(...NEUTRO) } diff --git a/app/models/consolidacao.rb b/app/models/consolidacao.rb index 45b3a15..3c9a9a3 100644 --- a/app/models/consolidacao.rb +++ b/app/models/consolidacao.rb @@ -8,6 +8,11 @@ class Consolidacao < ApplicationRecord has_many :consolidacao_motoristas, dependent: :destroy has_many :consolidacao_entregas, dependent: :destroy + has_many :consolidacao_veiculos, dependent: :destroy + + # Bucket dos lançamentos sem veículo (termo/apontamento manual legado). Mesmo + # sentinel do controller e de ConsolidacaoVeiculo. + SEM_VEICULO = ConsolidacaoVeiculo::SEM_VEICULO # ── Enums ─────────────────────────────────────────────────── enum status: { rascunho: 0, finalizada: 1, arquivada: 2 } @@ -111,21 +116,34 @@ class Consolidacao < ApplicationRecord def finalizar!(user) return false unless todas_entregas_classificadas? - update!( - status: :finalizada, - finalizado_por: user.id, - finalizado_em: Time.current - ) + transaction do + # Finalizar a consolidação fecha (consolida) os veículos que ainda estavam + # abertos — mantém o estado por veículo coerente com o todo finalizado. + consolidacao_veiculos.ativos.abertos.update_all( + fechado_em: Time.current, fechado_por: user.id, updated_at: Time.current + ) + update!( + status: :finalizada, + finalizado_por: user.id, + finalizado_em: Time.current + ) + end end - # Só está completa quando CADA motorista tem todas as suas entregas elegíveis - # classificadas. (Antes era uma soma agregada com >=, que mascarava motoristas - # pendentes quando outro tinha entregas a mais.) + # Só está completa quando CADA motorista ativo está completo (nada por + # classificar, descontados os veículos arquivados). Fechar veículo é um passo + # independente; ao finalizar, os veículos abertos são consolidados juntos. def todas_entregas_classificadas? - consolidacao_motoristas.ativos.all? do |cm| - total = entregas_elegiveis_count(cm.motorista_nome) - total.zero? || classificadas_count(cm.motorista_nome) >= total - end + consolidacao_motoristas.ativos.all? { |cm| motorista_completo?(cm.motorista_nome) } + end + + # Completude de UM motorista: não sobra entrega elegível por classificar. Os + # veículos ARQUIVADOS saem da conta (suas entregas deixam de ser exigidas), + # permitindo finalizar deixando um carro problemático de fora. Fechar um veículo + # é um passo independente (lock) — a finalização em si fecha os que restarem. + def motorista_completo?(motorista) + total = entregas_elegiveis_count(motorista) - eligible_veiculos_arquivados(motorista) + total.zero? || classificadas_count(motorista) >= total end def percentual_classificado @@ -153,6 +171,28 @@ class Consolidacao < ApplicationRecord ) end + # Elegíveis de UM veículo específico do motorista (respeita filtros da + # consolidação). O bucket "(sem veículo)" casa as entregas com vehicle NULL/vazio. + def entregas_elegiveis_count_veiculo(motorista, vehicle) + rel = Entrega.atendidas.da_conta_gade + .no_periodo_checkout(data_inicio, data_fim) + .do_motorista(motorista) + rel = rel.da_veiculo(vehicle_ids) if vehicle_ids.present? + rel = rel.da_operacoes(operacoes) if operacoes.present? + rel = vehicle == SEM_VEICULO ? rel.where(vehicle: [nil, '']) : rel.where(vehicle: vehicle) + rel.count + end + + # Total de elegíveis dos veículos ARQUIVADOS do motorista — descontado do gate + # para que arquivar um carro problemático libere a finalização. Só toca a base + # externa quando existe algum veículo arquivado (mantém os testes isolados). + def eligible_veiculos_arquivados(motorista) + arquivados = consolidacao_veiculos.arquivados.where(motorista_nome: motorista) + return 0 if arquivados.empty? + + arquivados.sum { |cv| entregas_elegiveis_count_veiculo(motorista, cv.vehicle) } + end + # Rótulos amigáveis das operações vinculadas (para exibição). def operacoes_label Array(operacoes).map { |t| Operacao.label(t) } @@ -190,6 +230,7 @@ class Consolidacao < ApplicationRecord motorista_nome: motorista, valor_aplicado: ConsolidacaoEntrega.valor_para(tipo), manual: true, + vehicle: entrega.try(:vehicle).presence, # snapshot do veículo da rastreio created_by: user&.id ) ce.save! @@ -208,7 +249,7 @@ class Consolidacao < ApplicationRecord # O motorista vem digitado (não de uma Entrega) e é incluído se ainda não # estiver. tracking_id é sintético (não há Entrega), e a NF/observação ficam # guardadas em nf_manual/obs_manual. - def adicionar_apontamento_manual!(motorista:, tipos:, user:, nf: nil, obs: nil, valor_extra: nil) + def adicionar_apontamento_manual!(motorista:, tipos:, user:, nf: nil, obs: nil, valor_extra: nil, vehicle: nil) tipos_validos = Array(tipos).map(&:to_s).select { |t| ConsolidacaoEntrega.tipos.key?(t) }.uniq raise ArgumentError, 'Selecione ao menos uma classificação.' if tipos_validos.empty? @@ -232,6 +273,7 @@ class Consolidacao < ApplicationRecord motorista_nome: nome, valor_aplicado: valor, manual: true, + vehicle: vehicle.presence, # veículo escolhido no lançamento (Q3) nf_manual: nf.presence, obs_manual: obs.presence, created_by: user&.id @@ -249,7 +291,7 @@ class Consolidacao < ApplicationRecord # para atrelar (só motorista + quantidade, a um preço fixo configurável). Fica # numa única linha (manual: true): quantidade guarda o N e valor_aplicado guarda # o total do lote, então recalcular_motorista! e demais somas seguem inalteradas. - def adicionar_termos!(motorista:, quantidade:, user:) + def adicionar_termos!(motorista:, quantidade:, user:, vehicle: nil) nome = motorista.to_s.strip raise ArgumentError, 'Informe o motorista do termo.' if nome.blank? @@ -266,6 +308,7 @@ class Consolidacao < ApplicationRecord quantidade: qtd, valor_aplicado: qtd * ConsolidacaoEntrega.valor_para('termo'), # total do lote manual: true, + vehicle: vehicle.presence, # veículo escolhido no lançamento (Q3) created_by: user&.id ) @@ -286,6 +329,27 @@ class Consolidacao < ApplicationRecord end cm.update_column(:valor_total, total) update_column(:valor_total, consolidacao_motoristas.ativos.sum(:valor_total)) + sincronizar_veiculos!(nome) + end + + # Mantém as linhas de consolidacao_veiculos do motorista em dia a partir dos + # pilares já classificados (100% DB — não toca a base externa). Cria/atualiza uma + # linha por veículo presente nas classificações e remove as que ficaram sem + # pilares e ainda não foram fechadas/arquivadas. Veículos elegíveis mas 100% sem + # classificar não geram linha aqui — o gate já os pega por classificadas < total. + def sincronizar_veiculos!(nome) + entregas = consolidacao_entregas.where(motorista_nome: nome) + presentes = entregas.pluck(:vehicle).map { |v| v.presence || SEM_VEICULO }.uniq + + presentes.each do |veic| + cv = consolidacao_veiculos.find_or_initialize_by(motorista_nome: nome, vehicle: veic) + cv.save! # before_save :recalcular_valor atualiza o valor_total do veículo + end + + consolidacao_veiculos.where(motorista_nome: nome) + .where(fechado_em: nil, arquivado_em: nil) + .where.not(vehicle: presentes) + .destroy_all end private diff --git a/app/models/consolidacao_veiculo.rb b/app/models/consolidacao_veiculo.rb new file mode 100644 index 0000000..b88cb17 --- /dev/null +++ b/app/models/consolidacao_veiculo.rb @@ -0,0 +1,71 @@ +# app/models/consolidacao_veiculo.rb +# Unidade de FECHAMENTO por veículo dentro de uma consolidação. Espelha os padrões +# de ConsolidacaoMotorista (arquivamento reversível + valor_total recalculado dos +# pilares), mas o que ela controla é o estado "fechado/consolidado" de cada carro. +# O PAGAMENTO continua no motorista (ConsolidacaoMotorista) — ver [[consolidacao]]. +class ConsolidacaoVeiculo < ApplicationRecord + # Nome da tabela fixado (mesmo motivo dos outros: inflector pt-BR). + self.table_name = 'consolidacao_veiculos' + + # Bucket dos lançamentos sem veículo (termo/apontamento manual legado). Igual ao + # sentinel usado no controller e na migração — NULL quebraria o índice único. + SEM_VEICULO = '(sem veículo)' + + belongs_to :consolidacao + belongs_to :fechador, class_name: 'User', foreign_key: :fechado_por, optional: true + belongs_to :arquivador, class_name: 'User', foreign_key: :arquivado_por, optional: true + + validates :motorista_nome, presence: true + validates :vehicle, presence: true + validates :vehicle, uniqueness: { scope: %i[consolidacao_id motorista_nome] } + + before_save :recalcular_valor + + # ── Fechamento (consolidação do veículo, reversível) ──────── + scope :fechados, -> { where.not(fechado_em: nil) } + scope :abertos, -> { where(fechado_em: nil) } + + # ── Arquivamento (reversível) — sai do gate, mantém os dados ─ + scope :ativos, -> { where(arquivado_em: nil) } + scope :arquivados, -> { where.not(arquivado_em: nil) } + + def fechado? + fechado_em.present? + end + + def arquivado? + arquivado_em.present? + end + + # update_columns: não dispara before_save (o valor já está correto no fechamento). + def fechar!(user) + update_columns(fechado_em: Time.current, fechado_por: user&.id, updated_at: Time.current) + end + + def reabrir!(_user) + update_columns(fechado_em: nil, fechado_por: nil, updated_at: Time.current) + end + + def arquivar!(user) + update_columns(arquivado_em: Time.current, arquivado_por: user&.id, updated_at: Time.current) + end + + def desarquivar!(_user) + update_columns(arquivado_em: nil, arquivado_por: nil, updated_at: Time.current) + end + + # Soma dos pilares deste (motorista + veículo). Mesma regra do ConsolidacaoMotorista: + # o valor_aplicado capturado na classificação é a fonte da verdade e o desconto + # subtrai. O bucket "(sem veículo)" casa os pilares com vehicle NULL/vazio. + def recalcular_valor + self.valor_total = escopo_entregas + .sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado } + end + + private + + def escopo_entregas + rel = consolidacao.consolidacao_entregas.where(motorista_nome: motorista_nome) + vehicle == SEM_VEICULO ? rel.where(vehicle: [nil, '']) : rel.where(vehicle: vehicle) + end +end diff --git a/app/views/consolidacao_entregas/validar.html.erb b/app/views/consolidacao_entregas/validar.html.erb index 8aa148a..1ad2c76 100644 --- a/app/views/consolidacao_entregas/validar.html.erb +++ b/app/views/consolidacao_entregas/validar.html.erb @@ -46,13 +46,15 @@ - <%# Fechar por veículo — filtra a tela por carro e mostra quais já estão fechados. + <%# Fechar por veículo — filtra a tela por carro, mostra o estado (pronto/ + consolidado/arquivado) e permite CONSOLIDAR o veículo selecionado. Só aparece quando o motorista usou mais de um veículo no período. %> + <% pode_fechar_veiculo = !(@consolidacao.finalizada? && current_user.operador?) %> <% if @veiculos_status.size > 1 %>

-
+
🚗 Fechar por veículo: - clique para filtrar/somar um ou vários carros (clique de novo p/ tirar) + clique no nome para filtrar; consolide o carro quando estiver 100% (🔒)
<%# Chip "Todos" — limpa a seleção (mostra todos os carros) %> @@ -66,18 +68,68 @@ <% selecionado = @veiculos_sel.include?(v[:vehicle]) %> <%# Alterna este veículo dentro da seleção atual (multi-seleção) %> <% nova_sel = selecionado ? (@veiculos_sel - [v[:vehicle]]) : (@veiculos_sel + [v[:vehicle]]) %> + <%# Cor determinística: selecionado(laranja) > consolidado(verde+🔒) > + pronto(verde) > arquivado(cinza tracejado) > neutro. %> + <% cor = if selecionado then 'border-orange-500 text-orange-400 bg-orange-500/10' + elsif v[:fechado] then 'border-green-500 text-green-400 bg-green-500/10' + elsif v[:completo] then 'border-green-600/50 text-green-400' + elsif v[:arquivado] then 'border-dashed border-[#3a3a3a] text-gray-500' + else 'border-[#2a2a2a] text-gray-300 hover:border-orange-500' end %> <%= link_to validar_consolidacao_consolidacao_entregas_path(@consolidacao, motorista: @motorista, vehicle: nova_sel.presence), data: { 'validacao-target': 'chipVeiculo', vehicle: v[:vehicle], eligible: v[:eligible] }, - class: "px-3 py-2 rounded-lg text-sm font-semibold border min-h-[40px] flex items-center gap-2 transition-colors - #{selecionado ? 'border-orange-500 text-orange-400 bg-orange-500/10' : (v[:fechado] ? 'border-green-500 text-green-400 bg-green-500/10' : 'border-[#2a2a2a] text-gray-300 hover:border-orange-500')}" do %> + class: "px-3 py-2 rounded-lg text-sm font-semibold border min-h-[40px] flex items-center gap-2 transition-colors #{cor}" do %> + 🔒 <%= v[:vehicle] %> - + <%= v[:classificadas] %>/<%= v[:eligible] %> - <%= '✓' if v[:fechado] %> + <%= '✓' if v[:completo] %> <% end %> <% end %>
+ + <%# Ação de consolidação — opera sobre o veículo único selecionado. %> + <% if pode_fechar_veiculo %> + <% sel_unico = @veiculos_sel.size == 1 ? @veiculos_sel.first : nil %> + <% status_unico = sel_unico && @veiculos_status.find { |v| v[:vehicle] == sel_unico } %> +
+ <% if status_unico.nil? %> +

Selecione um veículo (clique no nome) para consolidá-lo separadamente.

+ <% elsif status_unico[:fechado] %> +
+ 🔒 <%= sel_unico %> consolidado. + <%= button_to '🔓 Reabrir veículo', + reabrir_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), + method: :post, + params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, + data: { turbo_confirm: "Reabrir o veículo #{sel_unico} para edição?" }, + class: 'text-gray-400 hover:text-white border border-[#2a2a2a] hover:border-orange-500 px-3 py-2 rounded-lg text-xs min-h-[40px]' %> +
+ <% else %> +
+ <%# Habilita só quando o carro está 100% classificado; o JS liga/desliga + conforme a barra do escopo selecionado chega (ou não) a 100%. %> + <%= button_to '🔒 Consolidar este veículo', + fechar_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), + method: :post, + params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, + disabled: !status_unico[:completo], + data: { 'validacao-target': 'consolidarBtn', + turbo_confirm: "Consolidar o veículo #{sel_unico}? Você poderá reabrir depois." }, + class: "font-bold px-4 py-2 rounded-lg text-xs min-h-[40px] #{status_unico[:completo] ? 'bg-green-600 hover:bg-green-500 text-white cursor-pointer' : 'bg-[#2a2a2a] text-gray-600 cursor-not-allowed'}" %> + <%= button_to '🗄️ Arquivar veículo', + arquivar_veiculo_consolidacao_consolidacao_entregas_path(@consolidacao), + method: :post, + params: { motorista: @motorista, vehicle: sel_unico, vehicle_sel: @veiculos_sel }, + data: { turbo_confirm: "Arquivar o veículo #{sel_unico}? Ele sai da finalização (as entregas já classificadas continuam no pagamento)." }, + class: 'text-gray-400 hover:text-white border border-[#2a2a2a] hover:border-red-500/50 px-3 py-2 rounded-lg text-xs min-h-[40px]' %> + + <%= status_unico[:completo] ? 'Pronto para consolidar.' : 'Classifique 100% deste veículo para consolidar.' %> + +
+ <% end %> +
+ <% end %>
<% end %> @@ -172,6 +224,16 @@ <% end %> + <%# Veículo (Q3) — a qual carro este lançamento pertence (soma no balde dele) %> + + + <%# NF + observação (texto livre) %>
@@ -242,6 +304,16 @@
+ <%# Veículo (Q3) — a qual carro estes termos pertencem %> + + + <%# Stepper de quantidade %>
diff --git a/app/views/consolidacoes/show.html.erb b/app/views/consolidacoes/show.html.erb index 2ddc59d..bcf131d 100644 --- a/app/views/consolidacoes/show.html.erb +++ b/app/views/consolidacoes/show.html.erb @@ -91,6 +91,18 @@ <% end %>

<%= moeda(cm.valor_total) %>

+ <%# Breakdown por veículo (consolidados 🔒 / abertos). Informativo — o + pagamento continua sendo do motorista inteiro. %> + <% veiculos = @veiculos_por_motorista[cm.motorista_nome] %> + <% if veiculos.present? %> +
+ <% veiculos.each do |cv| %> + + <%= cv.fechado? ? '🔒' : '○' %> <%= cv.vehicle %> · <%= moeda(cv.valor_total) %> + + <% end %> +
+ <% end %> <% if cm.pago? %>

💰 Pago em <%= l cm.pago_em, format: :short %> diff --git a/app/views/consolidacoes/wizard.html.erb b/app/views/consolidacoes/wizard.html.erb index 6905c7f..d6d5913 100644 --- a/app/views/consolidacoes/wizard.html.erb +++ b/app/views/consolidacoes/wizard.html.erb @@ -187,6 +187,13 @@ · ➕ <%= m[:apontamentos] %> apontamento<%= 's' if m[:apontamentos] > 1 %> <% end %>

+ <% if m[:veiculos].any? %> +

+ + 🚗 <%= m[:veiculos_fechados] %>/<%= m[:veiculos].size %> veículo<%= 's' if m[:veiculos].size > 1 %> consolidado<%= 's' if m[:veiculos_fechados] != 1 %> + +

+ <% end %>
diff --git a/config/routes.rb b/config/routes.rb index 7bc0127..bc7d017 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -61,6 +61,10 @@ Rails.application.routes.draw do post :classificar # toggle individual (JSON) post :classificar_em_massa # ações em massa (JSON) get :revisar # Passo 3 — revisão do motorista + post :fechar_veiculo # consolida (fecha) um veículo do motorista + post :reabrir_veiculo # reabre um veículo já consolidado + post :arquivar_veiculo # tira um veículo do gate (reversível) + post :desarquivar_veiculo # restaura um veículo arquivado get :buscar_nf # JSON — busca a NF na SimpleRoute (apontamento manual) post :apontar # cria apontamento manual a partir da NF post :apontar_manual # apontamento 100% manual (sem rastreio) diff --git a/db/migrate/20260703000001_add_vehicle_to_consolidacao_entregas.rb b/db/migrate/20260703000001_add_vehicle_to_consolidacao_entregas.rb new file mode 100644 index 0000000..ced73c5 --- /dev/null +++ b/db/migrate/20260703000001_add_vehicle_to_consolidacao_entregas.rb @@ -0,0 +1,38 @@ +# Snapshot do veículo em cada pilar da consolidação. O veículo vive só na tabela +# externa de rastreio (db_reem_simplerout_2026), acessível via tracking_id. Guardar +# uma cópia aqui permite fechar/consolidar POR VEÍCULO sem N+1 e mantém o histórico +# estável mesmo que a base externa mude depois. Lançamentos sintéticos (apontamento +# 100% manual "MAN-*" e entrega de termo "TERMO-*") não têm veículo na rastreio e +# ficam NULL — o agrupamento trata NULL como "(sem veículo)". +class AddVehicleToConsolidacaoEntregas < ActiveRecord::Migration[7.1] + def up + unless column_exists?(:consolidacao_entregas, :vehicle) + add_column :consolidacao_entregas, :vehicle, :string + add_index :consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle], + name: 'idx_consolidacao_entrega_veiculo' + end + + # Backfill dos lançamentos já existentes a partir da rastreio. Só roda onde a + # tabela externa existe (dev/prod) — no banco de teste ela é isolada, então + # pulamos para não quebrar o db:migrate. + return unless connection.table_exists?('db_reem_simplerout_2026') + + say_with_time 'backfill vehicle em consolidacao_entregas' do + execute(<<~SQL.squish) + UPDATE consolidacao_entregas ce + SET vehicle = e.vehicle + FROM db_reem_simplerout_2026 e + WHERE e.tracking_id = ce.tracking_id + AND ce.vehicle IS NULL + SQL + end + end + + def down + if index_exists?(:consolidacao_entregas, %i[consolidacao_id motorista_nome vehicle], + name: 'idx_consolidacao_entrega_veiculo') + remove_index :consolidacao_entregas, name: 'idx_consolidacao_entrega_veiculo' + end + remove_column :consolidacao_entregas, :vehicle if column_exists?(:consolidacao_entregas, :vehicle) + end +end diff --git a/db/migrate/20260703000002_create_consolidacao_veiculos.rb b/db/migrate/20260703000002_create_consolidacao_veiculos.rb new file mode 100644 index 0000000..22d767f --- /dev/null +++ b/db/migrate/20260703000002_create_consolidacao_veiculos.rb @@ -0,0 +1,61 @@ +# Unidade de FECHAMENTO por veículo dentro de uma consolidação. Espelha o padrão de +# consolidacao_motoristas (arquivamento reversível + valor_total), mas o que ela +# controla é o estado "fechado/consolidado" de cada carro — o PAGAMENTO continua no +# motorista (consolidacao_motoristas). Assim dá para consolidar um veículo pronto +# sem esperar os outros. O bucket sem veículo (termo/apontamento manual legado) usa +# o sentinel '(sem veículo)' para que o índice único funcione (NULL quebraria). +class CreateConsolidacaoVeiculos < ActiveRecord::Migration[7.1] + SEM_VEICULO = '(sem veículo)' + + def up + unless table_exists?(:consolidacao_veiculos) + create_table :consolidacao_veiculos do |t| + t.references :consolidacao, null: false, foreign_key: { to_table: :consolidacoes } + t.string :motorista_nome, null: false + t.string :vehicle, null: false + t.decimal :valor_total, precision: 10, scale: 2, default: 0 + + t.datetime :fechado_em # NULL = aberto (ainda não consolidado) + t.integer :fechado_por + t.datetime :arquivado_em # NULL = ativo + t.integer :arquivado_por + + t.timestamps + end + + add_index :consolidacao_veiculos, %i[consolidacao_id motorista_nome vehicle], + unique: true, name: 'idx_consolidacao_veiculo_unique' + add_index :consolidacao_veiculos, :arquivado_em + end + + # Backfill: uma linha por (consolidação · motorista · veículo) já classificado, + # somando o valor (desconto = tipo 3 subtrai). Consolidações já finalizadas + # (status 1) nascem FECHADAS, herdando quem/quando finalizou — para não + # "reabrir" o que já foi pago. + say_with_time 'backfill consolidacao_veiculos a partir das entregas' do + execute(<<~SQL.squish) + INSERT INTO consolidacao_veiculos + (consolidacao_id, motorista_nome, vehicle, valor_total, + fechado_em, fechado_por, created_at, updated_at) + SELECT ce.consolidacao_id, + ce.motorista_nome, + COALESCE(NULLIF(ce.vehicle, ''), '#{SEM_VEICULO}') AS vehicle, + COALESCE(SUM(CASE WHEN ce.tipo = 3 + THEN -ce.valor_aplicado + ELSE ce.valor_aplicado END), 0) AS valor_total, + CASE WHEN c.status = 1 THEN c.finalizado_em END AS fechado_em, + CASE WHEN c.status = 1 THEN c.finalizado_por END AS fechado_por, + NOW(), NOW() + FROM consolidacao_entregas ce + JOIN consolidacoes c ON c.id = ce.consolidacao_id + GROUP BY ce.consolidacao_id, ce.motorista_nome, + COALESCE(NULLIF(ce.vehicle, ''), '#{SEM_VEICULO}'), + c.status, c.finalizado_em, c.finalizado_por + SQL + end + end + + def down + drop_table :consolidacao_veiculos if table_exists?(:consolidacao_veiculos) + end +end diff --git a/spec/factories.rb b/spec/factories.rb index e52dba6..c91a81d 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -39,6 +39,12 @@ FactoryBot.define do sequence(:motorista_nome) { |n| "Motorista #{n}" } end + factory :consolidacao_veiculo do + association :consolidacao + sequence(:motorista_nome) { |n| "Motorista #{n}" } + sequence(:vehicle) { |n| "GADE_#{format('%03d', n)}" } + end + factory :consolidacao_entrega do association :consolidacao sequence(:tracking_id) { |n| "TRK-#{n}" } diff --git a/spec/models/consolidacao_spec.rb b/spec/models/consolidacao_spec.rb index 74a8117..7f90f14 100644 --- a/spec/models/consolidacao_spec.rb +++ b/spec/models/consolidacao_spec.rb @@ -232,4 +232,85 @@ RSpec.describe Consolidacao, type: :model do expect(Consolidacao.arquivadas).to include(arquivada) end end + + describe '#sincronizar_veiculos! (via recalcular_motorista!)' do + let(:consolidacao) { create(:consolidacao) } + + before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') } + + it 'cria uma linha por veículo classificado, somando o valor do veículo' do + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', tipo: :entrega_normal, valor_aplicado: 15) + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', tipo: :bonus, valor_aplicado: 10) + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_2', tipo: :entrega_normal, valor_aplicado: 20) + + consolidacao.recalcular_motorista!('A') + + veics = consolidacao.consolidacao_veiculos.where(motorista_nome: 'A').order(:vehicle) + expect(veics.map(&:vehicle)).to eq(%w[GADE_1 GADE_2]) + expect(veics.find_by(vehicle: 'GADE_1').valor_total).to eq(25) + expect(veics.find_by(vehicle: 'GADE_2').valor_total).to eq(20) + end + + it 'remove o veículo aberto que ficou sem pilares, mas preserva o fechado' do + e1 = create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', valor_aplicado: 15) + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_2', valor_aplicado: 20) + consolidacao.recalcular_motorista!('A') + consolidacao.consolidacao_veiculos.find_by(vehicle: 'GADE_2').fechar!(create(:gerente)) + + e1.destroy + consolidacao.recalcular_motorista!('A') + + veics = consolidacao.consolidacao_veiculos.where(motorista_nome: 'A') + expect(veics.pluck(:vehicle)).to contain_exactly('GADE_2') # GADE_1 (aberto e vazio) removido + end + end + + describe 'gate: veículo arquivado libera a finalização' do + let(:consolidacao) { create(:consolidacao) } + + before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') } + + it 'desconta as elegíveis do veículo arquivado' do + allow(consolidacao).to receive(:entregas_elegiveis_count).with('A').and_return(3) + allow(consolidacao).to receive(:entregas_elegiveis_count_veiculo).with('A', 'GADE_2').and_return(1) + + # 2 classificadas (GADE_1). Falta 1 (GADE_2) => incompleto. + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', tracking_id: 'T1') + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', tracking_id: 'T2', tipo: :bonus) + expect(consolidacao.motorista_completo?('A')).to be false + + # Arquiva GADE_2 (o carro sem classificar): total cai p/ 2 => completo. + cv = consolidacao.consolidacao_veiculos.create!(motorista_nome: 'A', vehicle: 'GADE_2') + cv.arquivar!(create(:gerente)) + expect(consolidacao.motorista_completo?('A')).to be true + end + end + + describe '#finalizar! fecha os veículos ainda abertos' do + let(:consolidacao) { create(:consolidacao) } + let(:gerente) { create(:gerente) } + + before { create(:consolidacao_motorista, consolidacao: consolidacao, motorista_nome: 'A') } + + it 'consolida os veículos abertos ao finalizar' do + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'A', + vehicle: 'GADE_1', valor_aplicado: 15) + consolidacao.recalcular_motorista!('A') + cv = consolidacao.consolidacao_veiculos.find_by(vehicle: 'GADE_1') + expect(cv).not_to be_fechado + + allow(consolidacao).to receive(:todas_entregas_classificadas?).and_return(true) + consolidacao.finalizar!(gerente) + + expect(cv.reload).to be_fechado + expect(cv.fechado_por).to eq(gerente.id) + end + end end diff --git a/spec/models/consolidacao_veiculo_spec.rb b/spec/models/consolidacao_veiculo_spec.rb new file mode 100644 index 0000000..34ce07c --- /dev/null +++ b/spec/models/consolidacao_veiculo_spec.rb @@ -0,0 +1,74 @@ +require 'rails_helper' + +RSpec.describe ConsolidacaoVeiculo, type: :model do + let(:consolidacao) { create(:consolidacao) } + + describe 'validações' do + it 'exige motorista_nome e vehicle' do + expect(build(:consolidacao_veiculo, motorista_nome: nil)).not_to be_valid + expect(build(:consolidacao_veiculo, vehicle: nil)).not_to be_valid + end + + it 'não permite o mesmo veículo duas vezes para o mesmo motorista' do + create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'A', vehicle: 'GADE_1') + dup = build(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'A', vehicle: 'GADE_1') + expect(dup).not_to be_valid + end + end + + describe '#recalcular_valor (before_save)' do + before do + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao', + vehicle: 'GADE_1', tipo: :entrega_normal, valor_aplicado: 15) + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao', + vehicle: 'GADE_1', tipo: :desconto, valor_aplicado: 5) + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao', + vehicle: 'GADE_2', tipo: :entrega_normal, valor_aplicado: 99) + end + + it 'soma só os pilares do veículo e trata desconto como negativo' do + cv = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'Joao', vehicle: 'GADE_1') + expect(cv.valor_total).to eq(10) # 15 - 5 (GADE_2 fica de fora) + end + + it 'o bucket "(sem veículo)" casa pilares com vehicle NULL/vazio' do + create(:consolidacao_entrega, consolidacao: consolidacao, motorista_nome: 'Joao', + vehicle: nil, tipo: :bonus, valor_aplicado: 7) + cv = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'Joao', + vehicle: ConsolidacaoVeiculo::SEM_VEICULO) + expect(cv.valor_total).to eq(7) + end + end + + describe 'fechamento e arquivamento' do + let(:gerente) { create(:gerente) } + + it 'fecha e reabre registrando quem/quando' do + cv = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'A', vehicle: 'GADE_1') + expect(cv).not_to be_fechado + + cv.fechar!(gerente) + cv.reload + expect(cv).to be_fechado + expect(cv.fechado_por).to eq(gerente.id) + expect(cv.fechado_em).to be_present + + cv.reabrir!(gerente) + expect(cv.reload).not_to be_fechado + end + + it 'arquiva e desarquiva, e os escopos separam os estados' do + aberto = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'A', vehicle: 'GADE_1') + fechado = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'B', vehicle: 'GADE_2') + arquivado = create(:consolidacao_veiculo, consolidacao: consolidacao, motorista_nome: 'C', vehicle: 'GADE_3') + fechado.fechar!(gerente) + arquivado.arquivar!(gerente) + + expect(ConsolidacaoVeiculo.fechados).to include(fechado) + expect(ConsolidacaoVeiculo.fechados).not_to include(aberto) + expect(ConsolidacaoVeiculo.abertos).to include(aberto) + expect(ConsolidacaoVeiculo.ativos).not_to include(arquivado) + expect(ConsolidacaoVeiculo.arquivados).to contain_exactly(arquivado) + end + end +end