, Correçoes na busca da API para ver os ultimos planos
This commit is contained in:
@@ -126,15 +126,47 @@ module Pdf
|
||||
end
|
||||
|
||||
def self.logo_escolhido
|
||||
caminho, = logo_configurado
|
||||
caminho
|
||||
end
|
||||
|
||||
# O logo escolhido E o motivo de ele não estar valendo — os dois juntos,
|
||||
# porque quem chama precisa saber a diferença entre "ninguém escolheu logo"
|
||||
# e "o logo que o operador subiu SUMIU do disco".
|
||||
#
|
||||
# ⚠️ ISTO ERA UM `File.exist?(x) ? x : nil` MUDO, e foi um bug real
|
||||
# (relatado em 28/08/2026): o operador subiu outro logo, a tela disse "Logo
|
||||
# atualizado", e o PDF continuou saindo com o logo antigo — porque o arquivo
|
||||
# não estava mais na pasta e o método caía no padrão sem dizer nada a
|
||||
# ninguém. Falha silenciosa em cima de documento que vai IMPRESSO para o
|
||||
# cliente é o pior tipo: ninguém procura o que não reclama.
|
||||
#
|
||||
# A causa mais provável do arquivo sumir: `storage/` é gitignorado
|
||||
# (`/storage/*`) e o deploy é cópia de pasta pelo share SMB do NAS — a cópia
|
||||
# leva junto a pasta vazia da máquina de quem publicou. Se acontecer de
|
||||
# novo, o log e a tela agora dizem.
|
||||
#
|
||||
# Devolve [caminho, problema]:
|
||||
# [nil, nil] -> ninguém escolheu logo (usa o da GADE, normal)
|
||||
# [caminho, nil] -> logo escolhido e presente
|
||||
# [nil, :sumiu] -> escolhido MAS o arquivo não está lá
|
||||
# [nil, :sem_banco] -> sem Rails/tabela (o container pelado do layout)
|
||||
def self.logo_configurado
|
||||
nome = Configuracao.valor('romaneio_logo').to_s
|
||||
return nil if nome.strip.empty?
|
||||
return [nil, nil] if nome.strip.empty?
|
||||
|
||||
caminho = pasta_logos.join(nome).to_s
|
||||
File.exist?(caminho) ? caminho : nil
|
||||
return [caminho, nil] if File.exist?(caminho)
|
||||
|
||||
if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
|
||||
Rails.logger.error("[romaneio] logo '#{nome}' configurado mas AUSENTE em #{pasta_logos} — " \
|
||||
'o PDF saiu com o logo padrão')
|
||||
end
|
||||
[nil, :sumiu]
|
||||
rescue StandardError
|
||||
# Sem banco (a conferência de layout roda num container Ruby pelado) ou
|
||||
# tabela ainda não migrada: o PDF continua saindo, com o logo padrão.
|
||||
nil
|
||||
[nil, :sem_banco]
|
||||
end
|
||||
|
||||
def render
|
||||
|
||||
@@ -64,6 +64,16 @@ module SimpliRoute
|
||||
Array(get(caminho))
|
||||
end
|
||||
|
||||
# UM plano pelo uuid. Existe separado de `planos` porque a busca do plano
|
||||
# ESCOLHIDO não pode depender de recorte nenhum: o operador pode ter filtrado
|
||||
# por período e escolhido um plano fora dos mais recentes, e procurá-lo numa
|
||||
# lista cortada devolveria "plano não encontrado" para um plano que existe.
|
||||
def plano(id)
|
||||
Array(get('/v1/routes/plans/')).find { |pl| pl['id'].to_s == id.to_s }
|
||||
rescue Error
|
||||
nil
|
||||
end
|
||||
|
||||
# UMA rota pelo uuid. Serve para descobrir o DIA REAL de um plano: o registro
|
||||
# do plano só traz a JANELA (`start_date`/`end_date`), e o dia das rotas nem
|
||||
# sempre é o começo dela — medido em 28/08/2026: EMAD SETEMBRO 2026 (31/08 a
|
||||
@@ -113,12 +123,22 @@ module SimpliRoute
|
||||
# (o EMAD SETEMBRO 2026 vai de 31/08 a 08/09), e é justamente essa janela que
|
||||
# tornava impossível adivinhar "a data do plano". Quem publicou por último é
|
||||
# quem o operador quer — ele abre a ferramenta logo depois de lançar.
|
||||
def planos(limite: 5)
|
||||
Array(get('/v1/routes/plans/'))
|
||||
.sort_by { |p| p['created'].to_s }
|
||||
.reverse
|
||||
.first(limite)
|
||||
rescue Error
|
||||
#
|
||||
# COM PERÍODO (`inicio`/`fim`) o corte muda de propósito: em vez dos N mais
|
||||
# recentes, devolve TODOS os planos da faixa — é assim que se alcança um
|
||||
# plano antigo sem saber o dia dele, e é o mesmo recorte que a tela do
|
||||
# SimpliRoute usa. O critério é a JANELA DO PLANO CRUZAR o período
|
||||
# (`start_date <= fim AND end_date >= inicio`), a mesma semântica de
|
||||
# `Consolidacao.cruzando_periodo`: um plano de 31/08 a 08/09 pertence a
|
||||
# agosto E a setembro, e some da lista se a regra for "está dentro".
|
||||
def planos(limite: 5, inicio: nil, fim: nil)
|
||||
lista = Array(get('/v1/routes/plans/')).sort_by { |p| p['created'].to_s }.reverse
|
||||
return lista.first(limite) if inicio.blank? || fim.blank?
|
||||
|
||||
i = inicio.to_date
|
||||
f = fim.to_date
|
||||
lista.select { |p| cruza_periodo?(p, i, f) }
|
||||
rescue Error, Date::Error
|
||||
[]
|
||||
end
|
||||
|
||||
@@ -192,6 +212,18 @@ module SimpliRoute
|
||||
|
||||
private
|
||||
|
||||
# Plano sem data em um dos lados não some da lista por isso: usa a que tem.
|
||||
# Sumir em silêncio é o pior resultado possível numa lista de escolha.
|
||||
def cruza_periodo?(plano, inicio, fim)
|
||||
comeco = Date.parse(plano['start_date'].to_s) rescue nil
|
||||
termino = Date.parse(plano['end_date'].to_s) rescue nil
|
||||
comeco ||= termino
|
||||
termino ||= comeco
|
||||
return false if comeco.nil?
|
||||
|
||||
comeco <= fim && termino >= inicio
|
||||
end
|
||||
|
||||
def get(path)
|
||||
requisicao(Net::HTTP::Get.new(caminho(path)))
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user