, Correçoes na busca da API para ver os ultimos planos
This commit is contained in:
@@ -6,10 +6,26 @@
|
||||
#
|
||||
# As bases externas (espelho de rastreio e gade_entregas_*) continuam SOMENTE
|
||||
# LEITURA — o que gravamos são as tabelas `romaneio*`, nossas.
|
||||
# FileUtils chegava aqui de carona no que o Rails carrega. Explícito porque o
|
||||
# upload do logo depende dele: sem o require, o dia em que o Rails parar de
|
||||
# carregá-lo o erro é um NameError no meio da gravação.
|
||||
require 'fileutils'
|
||||
|
||||
class Admin::RomaneiosController < ApplicationController
|
||||
include Auditavel
|
||||
|
||||
before_action :carregar_romaneio, except: %i[index create importar_planilha]
|
||||
# ⚠️ TODA ACTION DE COLEÇÃO PRECISA ENTRAR NESTE `except`. `carregar_romaneio`
|
||||
# faz `Romaneio.find(params[:id])`, e numa rota de coleção não existe `:id` —
|
||||
# o find levanta RecordNotFound, que o Rails traduz em **404**. Não é erro de
|
||||
# rota: o roteador casa certinho e a action simplesmente nunca roda.
|
||||
#
|
||||
# Foi o bug de 28/08/2026: `atualizar_logo` foi adicionada ao `collection` do
|
||||
# routes.rb mas esquecida aqui, e clicar em "Trocar logo" devolvia
|
||||
# `POST /admin/romaneios/atualizar_logo 404 (Not Found)`. Como o 404 parece
|
||||
# "rota errada", a busca foi para todo lado menos para cá — e o sintoma que o
|
||||
# operador via era outro ("subi o logo e o PDF não mudou"), porque o upload
|
||||
# nunca chegava a acontecer.
|
||||
before_action :carregar_romaneio, except: %i[index create importar_planilha atualizar_logo]
|
||||
|
||||
def index
|
||||
authorize Romaneio
|
||||
@@ -129,6 +145,14 @@ class Admin::RomaneiosController < ApplicationController
|
||||
arquivo = params[:logo]
|
||||
return redirect_to(admin_romaneios_path, alert: 'Escolha o arquivo do logo (PNG ou JPG).') if arquivo.blank?
|
||||
|
||||
# `params[:logo]` só é um arquivo se o <form> for multipart. Sem isto, um
|
||||
# form mal montado manda uma String e a linha seguinte estoura com
|
||||
# NoMethodError — página 500 em vez de "escolha o arquivo".
|
||||
unless arquivo.respond_to?(:read) && arquivo.respond_to?(:size)
|
||||
return redirect_to(admin_romaneios_path,
|
||||
alert: 'O arquivo não chegou. Escolha o logo e envie de novo.')
|
||||
end
|
||||
|
||||
if arquivo.size > LOGO_TAMANHO_MAX
|
||||
return redirect_to(admin_romaneios_path,
|
||||
alert: 'Logo acima de 2 MB. Reduza a imagem antes de enviar.')
|
||||
@@ -157,8 +181,23 @@ class Admin::RomaneiosController < ApplicationController
|
||||
# mostrar "Logo: LOGOGADE.png" como o operador reconhece.
|
||||
nome = "logo-#{Time.current.strftime('%Y%m%d%H%M%S')}#{extensao}"
|
||||
destino = Pdf::RomaneioPdf.pasta_logos
|
||||
FileUtils.mkdir_p(destino)
|
||||
File.binwrite(destino.join(nome), conteudo)
|
||||
|
||||
# ⚠️ A GRAVAÇÃO PODE FALHAR, E FALHAR AQUI NÃO É "bug do Rails": `storage/`
|
||||
# mora no share SMB do NAS, onde permissão de pasta se perde na cópia (o
|
||||
# mesmo motivo que fez o bin/docker-boot ser chamado com `bash` explícito).
|
||||
# Sem este rescue, um EACCES vira a página 500 crua na cara do operador, sem
|
||||
# dizer o que houve nem o que fazer — foi o que aconteceu em 28/08/2026 ao
|
||||
# clicar em "Trocar logo".
|
||||
begin
|
||||
FileUtils.mkdir_p(destino)
|
||||
File.binwrite(destino.join(nome), conteudo)
|
||||
rescue SystemCallError => e
|
||||
Rails.logger.error("[romaneio] falha ao gravar logo em #{destino}: #{e.class}: #{e.message}")
|
||||
return redirect_to(admin_romaneios_path,
|
||||
alert: "Não consegui gravar o logo em #{destino} (#{e.class}). " \
|
||||
'A pasta existe e o container tem permissão de escrita nela? ' \
|
||||
'O erro completo está no log do container.')
|
||||
end
|
||||
|
||||
config = Configuracao.find_or_initialize_by(chave: 'romaneio_logo')
|
||||
config.update!(valor: nome, descricao: arquivo.original_filename.to_s.first(120),
|
||||
|
||||
Reference in New Issue
Block a user