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>
97 lines
2.2 KiB
Ruby
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
|