, Correçoes na busca da API para ver os ultimos planos

This commit is contained in:
2026-08-28 17:03:37 -03:00
parent bfa474262f
commit 3e51d0e03b
6 changed files with 603 additions and 36 deletions

View File

@@ -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