Romaneio: lista de veículos visível, busca com contador e logo escolhível

Traz para a tela as funções do programa original (Romaneiro PDF), na linha de
design do projeto:
- Veículos deixam de ser um <select> e viram lista visível com a contagem de
  paradas de cada carro — que é a conferência feita antes de imprimir e ficava
  invisível mostrando um veículo por vez. Cada item é link (?veiculo=), então
  sobrevive ao 'voltar' e ao F5. No celular vira faixa horizontal.
- Na mesma coluna: motorista do veículo, 'PDF deste veículo' e 'PDF de TODOS'.
- Busca ganha 'Limpar busca' e contador vivo ('4 de 31 paradas'). A contagem
  saiu do cabeçalho da tabela: dois números para a mesma coisa, um atualizando e
  o outro não, é a divergência que a diretriz 1 proíbe.
- Logo do cabeçalho escolhível (Configuracao 'romaneio_logo', separado do
  empresa_logo — o romaneio é documento do cliente). PNG/JPG até 2MB, gravado em
  storage/logos/ e não em public/, com nome gerado pelo sistema.
This commit is contained in:
2026-08-27 19:20:49 -03:00
parent 7fa2336b35
commit b3464e3acd
11 changed files with 274 additions and 65 deletions

View File

@@ -105,12 +105,36 @@ module Pdf
@max_linhas_folha = (sobra / @linha_h).floor
end
# O logo é ESCOLHÍVEL na tela (Configuracao 'romaneio_logo') porque o romaneio é
# documento do CLIENTE: quando a operação muda de contratante, trocar o
# cabeçalho não pode exigir deploy. Sem escolha, cai no logo da GADE que está
# no repositório.
def self.logo_padrao
if defined?(Rails) && Rails.respond_to?(:root) && Rails.root
Rails.root.join('public', 'logo-gade.png').to_s
else
File.expand_path('../../../public/logo-gade.png', __dir__)
end
return File.expand_path('../../../public/logo-gade.png', __dir__) unless dentro_do_rails?
logo_escolhido || Rails.root.join('public', 'logo-gade.png').to_s
end
# Pasta dos logos enviados pela tela. Fora de public/ de propósito: o que o
# operador sobe não vira arquivo servido pela web sem passar por autorização.
def self.pasta_logos
Rails.root.join('storage', 'logos')
end
def self.dentro_do_rails?
defined?(Rails) && Rails.respond_to?(:root) && !Rails.root.nil?
end
def self.logo_escolhido
nome = Configuracao.valor('romaneio_logo').to_s
return nil if nome.strip.empty?
caminho = pasta_logos.join(nome).to_s
File.exist?(caminho) ? caminho : nil
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
end
def render