Atualização da função de adicionar entregas por fora da operação

This commit is contained in:
2026-06-19 14:59:26 -03:00
parent 79c0f646da
commit 7b83f2e248
13 changed files with 399 additions and 77 deletions

View File

@@ -101,10 +101,60 @@ class ConsolidacoesController < ApplicationController
render json: Operacao.dados(params[:operacoes])
end
# GET /consolidacoes/buscar_nf?nf=123 — busca a NF na SimpleRoute (nota avulsa).
def buscar_nf
authorize Consolidacao, :create?
nf = params[:nf].to_s.strip
return render(json: { ok: false, erro: 'Informe o número da nota.' }, status: :unprocessable_entity) if nf.blank?
entregas = Entrega.da_conta_gade.por_nf(nf).order(:checkout)
if entregas.empty?
render json: { ok: false, erro: "Nota #{nf} não encontrada na base de rastreio." }
else
render json: { ok: true, nf: nf, entregas: entregas.map(&:resumo_apontamento) }
end
end
# POST /consolidacoes/avulsa — cria uma consolidação JÁ a partir de uma NF
# avulsa (entrega que chegou por fora) e adiciona o apontamento ao motorista.
def avulsa
authorize Consolidacao, :create?
entrega = Entrega.da_conta_gade.find_by(tracking_id: params[:tracking_id])
return redirect_to(consolidacoes_path, alert: 'Entrega não encontrada na base de rastreio.') unless entrega
data_ref = (entrega.checkout || entrega.planned_date)&.to_date || Date.current
consolidacao = nil
ActiveRecord::Base.transaction do
consolidacao = Consolidacao.create!(
nome: "Avulsa nf#{entrega.numero_nf}",
data_inicio: data_ref,
data_fim: data_ref.end_of_month,
created_by: current_user.id
)
consolidacao.adicionar_apontamento!(entrega, Array(params[:tipos]).reject(&:blank?), current_user)
end
auditar!(:criar, consolidacao,
dados_novos: { avulsa_nf: entrega.numero_nf, motorista: entrega.driver, tipos: params[:tipos] })
redirect_to consolidacao_path(consolidacao),
notice: "Consolidação avulsa criada para #{entrega.driver} (NF #{entrega.numero_nf})."
rescue ArgumentError => e
redirect_to consolidacoes_path, alert: e.message
rescue ActiveRecord::RecordInvalid => e
redirect_to consolidacoes_path, alert: "Não foi possível criar a consolidação avulsa: #{e.message}"
end
# GET /consolidacoes/:id — visão geral
def show
authorize @consolidacao
@motoristas = @consolidacao.consolidacao_motoristas.order(:motorista_nome)
# Apontamentos manuais agrupados por nota (tracking) p/ exibição e remoção.
@apontamentos = @consolidacao.consolidacao_entregas.apontamentos
.order(:motorista_nome, :tracking_id)
.group_by { |ce| [ce.motorista_nome, ce.tracking_id] }
end
# GET /consolidacoes/:id/wizard — PASSO 1: selecionar motorista