75 lines
2.1 KiB
Ruby
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
|