Files
Reem-Notas/app/models/configuracao.rb
victor b3464e3acd 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.
2026-08-27 19:20:49 -03:00

136 lines
3.6 KiB
Ruby

# app/models/configuracao.rb
class Configuracao < ApplicationRecord
self.table_name = 'configuracoes'
# Chaves válidas do sistema
CHAVES = %w[
preco_entrega
preco_retirada
preco_bonus
preco_desconto
preco_extraordinaria
preco_termo
preco_termo_especial
# ⚠️ OBSOLETAS: quem liga/desliga notificação agora é ConfiguracaoNotificacao
# (tela /admin/configuracao_notificacao). Nenhum código lê estas duas chaves
# desde a migration CreateConfiguracaoNotificacoes, que copiou os valores.
# Continuam aqui só para não quebrar as linhas já existentes no banco.
notificacao_whatsapp
notificacao_email
empresa_nome
empresa_logo
# Logo impresso no romaneio (documento do CLIENTE — hoje a GADE, por isso é
# separado do `empresa_logo`, que é a marca da Reem). Guarda só o NOME do
# arquivo; o binário vive em storage/logos/. Vazio = usa public/logo-gade.png.
romaneio_logo
].freeze
CHAVES_MOEDA = %w[
preco_entrega
preco_retirada
preco_bonus
preco_desconto
preco_extraordinaria
preco_termo
preco_termo_especial
].freeze
validates :chave, presence: true, inclusion: { in: CHAVES }, uniqueness: true
validates :valor, presence: true
# ── Acesso rápido ───────────────────────────────────────────
def self.valor(chave)
find_by(chave: chave)&.valor
end
def self.preco_entrega
valor('preco_entrega').to_f
end
def self.preco_retirada
valor('preco_retirada').to_f
end
def self.preco_bonus
valor('preco_bonus').to_f
end
def self.preco_desconto
valor('preco_desconto').to_f
end
def self.preco_extraordinaria
valor('preco_extraordinaria').to_f
end
def self.preco_termo
valor('preco_termo').to_f
end
def self.preco_termo_especial
valor('preco_termo_especial').to_f
end
# Mapa usado pelo DashboardController (Fase 3)
def self.mapa_de_precos
{
entrega: preco_entrega,
retirada: preco_retirada,
bonus: preco_bonus,
desconto: preco_desconto,
extraordinaria: preco_extraordinaria,
termo: preco_termo,
termo_especial: preco_termo_especial
}
end
LABELS = {
'preco_entrega' => 'Entrega Normal',
'preco_retirada' => 'Retirada',
'preco_bonus' => 'Bônus',
'preco_desconto' => 'Desconto',
'preco_extraordinaria' => 'Entrega Extraordinária',
'preco_termo' => 'Entrega de Termo',
'preco_termo_especial' => 'Entrega de Termo Especial',
'notificacao_whatsapp' => 'Notificação WhatsApp',
'notificacao_email' => 'Notificação E-mail',
'empresa_nome' => 'Nome da Empresa'
}.freeze
ICONES = {
'preco_entrega' => '🚚',
'preco_retirada' => '📦',
'preco_bonus' => '⭐',
'preco_desconto' => '⚠️',
'preco_extraordinaria' => '✨',
'preco_termo' => '📄',
'preco_termo_especial' => '📋',
'notificacao_whatsapp' => '💬',
'notificacao_email' => '✉️',
'empresa_nome' => '🏢'
}.freeze
# Usados pelas views admin/configuracoes (Fase 2)
def tipo_label
LABELS[chave] || chave.humanize
end
def icone
ICONES[chave] || '⚙️'
end
def moeda?
CHAVES_MOEDA.include?(chave)
end
def valor_formatado
if moeda?
inteiro, decimais = format('%.2f', valor.to_f).split('.')
inteiro = inteiro.reverse.gsub(/(\d{3})(?=\d)/, '\1.').reverse
return "R$ #{inteiro},#{decimais}"
end
valor
end
end