# 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