Atualização da função de adicionar entregas por fora da operação
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user