Files
Reem-Notas/app/controllers/admin/grupos_contato_controller.rb

75 lines
2.1 KiB
Ruby

# app/controllers/admin/grupos_contato_controller.rb
#
# Grupos de destinatários. É o grupo que assina os eventos, então cadastrar
# alguém novo é escolher o grupo — não repetir a configuração pessoa por pessoa.
class Admin::GruposContatoController < ApplicationController
before_action :set_grupo, only: %i[edit update destroy]
def index
authorize GrupoContato
@grupos = policy_scope(GrupoContato).ordenados
.includes(:contatos, assinaturas: :evento_notificacao)
end
def new
@grupo = GrupoContato.new
authorize @grupo
end
def create
@grupo = GrupoContato.new(grupo_params)
authorize @grupo
if @grupo.save
registrar("Criou grupo de contatos #{@grupo.nome}")
redirect_to admin_grupos_path, notice: 'Grupo criado.'
else
render :new, status: :unprocessable_entity
end
end
def edit
authorize @grupo
end
def update
authorize @grupo
if @grupo.update(grupo_params)
registrar("Editou grupo de contatos #{@grupo.nome}")
redirect_to admin_grupos_path, notice: 'Grupo atualizado.'
else
render :edit, status: :unprocessable_entity
end
end
def destroy
authorize @grupo
# `dependent: :nullify`: os contatos NÃO são apagados junto — ficam sem
# grupo e param de receber, o que é reversível. Apagar pessoas porque o
# grupo saiu seria destrutivo demais para um clique.
nome = @grupo.nome
orfaos = @grupo.contatos.count
@grupo.destroy
registrar("Excluiu grupo de contatos #{nome} (#{orfaos} contato(s) ficaram sem grupo)")
redirect_to admin_grupos_path,
notice: "Grupo removido. #{orfaos} contato(s) ficaram sem grupo e não recebem mais."
end
private
def set_grupo
@grupo = GrupoContato.find(params[:id])
end
def grupo_params
params.require(:grupo_contato).permit(:nome, :descricao, :ativo)
end
def registrar(detalhes)
AuditoriaLog.registrar(user: current_user, acao: 'grupo_contato', entidade: 'GrupoContato',
dados_novos: { detalhes: detalhes }, request: request)
end
end