Files
Reem-Notas/app/models/configuracao.rb
victor c7ed5f0ceb Corrige 500 no painel do motorista (tabela consolidacao_motorista inexistente)
O inflector pt-BR (inflections.rb) resolvia o composto ConsolidacaoMotorista
para o singular "consolidacao_motorista", tabela que não existe (migration cria
"consolidacao_motoristas"). Login do motorista por PIN derrubava /motorista com
PG::UndefinedTable.

Fixa self.table_name explicitamente nos models pt-BR (Consolidacao,
ConsolidacaoMotorista, ConsolidacaoEntrega, Configuracao), eliminando a
dependência do inflector. Spec trava os nomes de tabela.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 01:50:07 -03:00

97 lines
2.2 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
notificacao_whatsapp
notificacao_email
empresa_nome
empresa_logo
].freeze
CHAVES_MOEDA = %w[
preco_entrega
preco_retirada
preco_bonus
preco_desconto
].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
# Mapa usado pelo DashboardController (Fase 3)
def self.mapa_de_precos
{
entrega: preco_entrega,
retirada: preco_retirada,
bonus: preco_bonus,
desconto: preco_desconto
}
end
LABELS = {
'preco_entrega' => 'Entrega Normal',
'preco_retirada' => 'Retirada',
'preco_bonus' => 'Bônus',
'preco_desconto' => 'Desconto',
'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' => '⚠️',
'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
return "R$ #{format('%.2f', valor.to_f).gsub('.', ',')}" if moeda?
valor
end
end