Adição da função de configuração de email e whatts
This commit is contained in:
101
app/controllers/admin/configuracao_notificacoes_controller.rb
Normal file
101
app/controllers/admin/configuracao_notificacoes_controller.rb
Normal file
@@ -0,0 +1,101 @@
|
||||
# app/controllers/admin/configuracao_notificacoes_controller.rb
|
||||
#
|
||||
# Tela única (singleton) de SMTP + WhatsApp. Só admin — ver
|
||||
# ConfiguracaoNotificacaoPolicy.
|
||||
class Admin::ConfiguracaoNotificacoesController < ApplicationController
|
||||
before_action :set_config
|
||||
|
||||
CAMPOS = %i[
|
||||
smtp_ativo smtp_address smtp_port smtp_username smtp_password smtp_domain
|
||||
smtp_autenticacao remetente_email remetente_nome
|
||||
email_notificacoes_ativo email_admin
|
||||
whatsapp_ativo twilio_account_sid twilio_auth_token twilio_from whatsapp_admin
|
||||
].freeze
|
||||
|
||||
def show
|
||||
authorize @config
|
||||
end
|
||||
|
||||
# PATCH /admin/configuracao_notificacao
|
||||
#
|
||||
# Os botões "enviar teste" são submits DESTE MESMO form, diferenciados por
|
||||
# params[:acao]. Assim o teste sempre usa o que está na tela — evita o
|
||||
# clássico "digitei a senha nova, cliquei em testar, e ele testou a antiga".
|
||||
def update
|
||||
authorize @config
|
||||
|
||||
antes = resumo
|
||||
|
||||
unless @config.update(config_params)
|
||||
flash.now[:alert] = @config.errors.full_messages.to_sentence
|
||||
return render(:show, status: :unprocessable_entity)
|
||||
end
|
||||
|
||||
auditar!(antes)
|
||||
|
||||
case params[:acao]
|
||||
when 'testar_email'
|
||||
redirecionar(Notificacao::TesteEmail.new(@config, usuario: current_user).executar)
|
||||
when 'testar_whatsapp'
|
||||
redirecionar(Notificacao::TesteWhatsapp.new(@config).executar)
|
||||
else
|
||||
redirect_to admin_configuracao_notificacao_path,
|
||||
notice: 'Configurações de notificação salvas.'
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_config
|
||||
@config = ConfiguracaoNotificacao.instancia
|
||||
end
|
||||
|
||||
def redirecionar(resultado)
|
||||
redirect_to admin_configuracao_notificacao_path, **resultado.para_flash
|
||||
end
|
||||
|
||||
def config_params
|
||||
permitidos = params.require(:configuracao_notificacao).permit(*CAMPOS)
|
||||
# Campo de senha em branco significa "mantenha a que já está gravada" — a
|
||||
# tela nunca exibe o valor, então salvar sem redigitar não pode apagá-lo.
|
||||
permitidos.delete(:smtp_password) if permitidos[:smtp_password].blank?
|
||||
permitidos.delete(:twilio_auth_token) if permitidos[:twilio_auth_token].blank?
|
||||
permitidos
|
||||
end
|
||||
|
||||
# ⚠️ NUNCA colocar senha ou token aqui: AuditoriaLog#dados_novos é exibido em
|
||||
# /admin/auditoria_logs, que gerente também acessa. Só o booleano de
|
||||
# "está definida ou não".
|
||||
def resumo
|
||||
{
|
||||
smtp_ativo: @config.smtp_ativo,
|
||||
smtp_address: @config.smtp_address,
|
||||
smtp_port: @config.smtp_port,
|
||||
smtp_username: @config.smtp_username,
|
||||
smtp_domain: @config.smtp_domain,
|
||||
smtp_autenticacao: @config.smtp_autenticacao,
|
||||
remetente_email: @config.remetente_email,
|
||||
remetente_nome: @config.remetente_nome,
|
||||
email_admin: @config.email_admin,
|
||||
email_notificacoes_ativo: @config.email_notificacoes_ativo,
|
||||
whatsapp_ativo: @config.whatsapp_ativo,
|
||||
twilio_account_sid: @config.twilio_account_sid,
|
||||
twilio_from: @config.twilio_from,
|
||||
whatsapp_admin: @config.whatsapp_admin,
|
||||
smtp_password_definida: @config.smtp_password?,
|
||||
twilio_auth_token_definido: @config.twilio_auth_token?
|
||||
}
|
||||
end
|
||||
|
||||
def auditar!(antes)
|
||||
AuditoriaLog.registrar(
|
||||
user: current_user,
|
||||
acao: 'editar_notificacoes',
|
||||
entidade: 'ConfiguracaoNotificacao',
|
||||
entidade_id: @config.id,
|
||||
dados_anteriores: antes,
|
||||
dados_novos: resumo,
|
||||
request: request
|
||||
)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user