, Correçoes na busca da API para ver os ultimos planos
This commit is contained in:
@@ -17,6 +17,11 @@ class Admin::RomaneiosController < ApplicationController
|
||||
@romaneios = Romaneio.recentes.includes(:romaneio_veiculos).limit(50)
|
||||
@operacoes_agrupadas = Operacao.agrupadas_por_mes
|
||||
@data_padrao = Date.current
|
||||
|
||||
# Os 5 planos mais recentes, para o operador ESCOLHER em vez de adivinhar a
|
||||
# data. Best-effort de propósito: API fora do ar devolve [] e a tela cai no
|
||||
# campo de data de sempre — a importação nunca fica bloqueada por isso.
|
||||
@planos = SimpliRoute::Client.new.planos(limite: 5)
|
||||
# Nome ORIGINAL do logo escolhido (a descricao), para a tela mostrar o mesmo
|
||||
# que o operador enviou; nil = ainda usando o logo da GADE do repositório.
|
||||
@logo_atual = Configuracao.find_by(chave: 'romaneio_logo')&.descricao
|
||||
@@ -44,7 +49,12 @@ class Admin::RomaneiosController < ApplicationController
|
||||
@romaneio = preparar_romaneio
|
||||
return if performed?
|
||||
|
||||
plano = Romaneios::PlanoDoDia.new(data: @romaneio.planned_date)
|
||||
# `@plano_escolhido` vem de #preparar_romaneio quando o operador clicou num
|
||||
# plano da lista; sem ele o caminho continua sendo por data.
|
||||
# Os DOIS: a data já foi resolvida em #preparar_romaneio (não paga a chamada
|
||||
# de novo) e ainda destrava a queda para o espelho local se a API cair no
|
||||
# meio; o plano é quem delimita as rotas.
|
||||
plano = Romaneios::PlanoDoDia.new(data: @romaneio.planned_date, plano: @plano_escolhido)
|
||||
importar(plano.linhas, origem: plano.origem)
|
||||
rescue SimpliRoute::Error => e
|
||||
# NotFound herda de Error: a mensagem dele já diz para enviar o .xlsx.
|
||||
@@ -262,9 +272,39 @@ class Admin::RomaneiosController < ApplicationController
|
||||
# "importar de novo o mesmo dia" cair na reconciliação em vez de criar um segundo
|
||||
# romaneio — a chave única (planned_date, operacao_tabela) é a garantia disso.
|
||||
def preparar_romaneio
|
||||
# ── Plano escolhido na lista (caminho normal desde 28/08/2026) ──────────
|
||||
# O plano resolve de uma vez os três campos que antes eram digitados: a
|
||||
# DATA (perguntada à API, porque a janela do plano não a revela), o NOME do
|
||||
# plano (que ia colado à mão e é o que descobre a operação do mês) e as
|
||||
# rotas, que delimitam o romaneio quando dois planos caem no mesmo dia.
|
||||
@plano_escolhido = nil
|
||||
data = params[:planned_date].presence
|
||||
|
||||
if params[:plano_id].present?
|
||||
@plano_escolhido = SimpliRoute::Client.new.planos(limite: 20)
|
||||
.find { |pl| pl['id'].to_s == params[:plano_id].to_s }
|
||||
if @plano_escolhido.nil?
|
||||
redirect_to admin_romaneios_path,
|
||||
alert: 'Plano não encontrado no SimpliRoute — recarregue a página e escolha de novo.'
|
||||
return nil
|
||||
end
|
||||
|
||||
# A data REAL do plano, não a janela dele. Sem isso o romaneio nasceria
|
||||
# com `planned_date` errado e o "Reimportar" (que é por data) buscaria o
|
||||
# dia errado depois.
|
||||
resolvida = Romaneios::PlanoDoDia.new(plano: @plano_escolhido).data_resolvida
|
||||
if resolvida.nil?
|
||||
redirect_to admin_romaneios_path,
|
||||
alert: "Não consegui descobrir o dia do plano \"#{@plano_escolhido['name']}\". " \
|
||||
'Informe a data ou envie a planilha do plano (.xlsx).'
|
||||
return nil
|
||||
end
|
||||
data = resolvida.to_s
|
||||
params[:rotulo_plano] = @plano_escolhido['name'] if params[:rotulo_plano].blank?
|
||||
end
|
||||
|
||||
if data.blank?
|
||||
redirect_to admin_romaneios_path, alert: 'Informe a data do plano.'
|
||||
redirect_to admin_romaneios_path, alert: 'Escolha um plano ou informe a data.'
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user