# app/controllers/admin/contatos_controller.rb # # Cadastro manual de quem recebe as mensagens: nome, WhatsApp e/ou e-mail, e o # grupo. O telefone é normalizado para E.164 no model — o ADM digita como quiser. class Admin::ContatosController < ApplicationController before_action :set_contato, only: %i[edit update destroy] before_action :carregar_grupos, only: %i[new create edit update] def index authorize Contato @grupos = GrupoContato.ordenados escopo = policy_scope(Contato).includes(:grupo_contato) escopo = escopo.where(grupo_contato_id: params[:grupo_id]) if params[:grupo_id].present? escopo = escopo.where('LOWER(nome) LIKE :q OR telefone LIKE :q OR LOWER(email) LIKE :q', q: "%#{params[:q].to_s.strip.downcase}%") if params[:q].present? @contatos = escopo.ordenados end def new @contato = Contato.new(grupo_contato_id: params[:grupo_id]) authorize @contato end def create @contato = Contato.new(contato_params) authorize @contato if @contato.save registrar("Cadastrou contato #{@contato.nome}") redirect_to admin_contatos_path, notice: 'Contato cadastrado.' else render :new, status: :unprocessable_entity end end def edit authorize @contato end def update authorize @contato if @contato.update(contato_params) registrar("Editou contato #{@contato.nome}") redirect_to admin_contatos_path, notice: 'Contato atualizado.' else render :edit, status: :unprocessable_entity end end def destroy authorize @contato nome = @contato.nome @contato.destroy registrar("Excluiu contato #{nome}") redirect_to admin_contatos_path, notice: 'Contato removido.' end private def set_contato @contato = Contato.find(params[:id]) end def carregar_grupos @grupos = GrupoContato.ativos.ordenados end def contato_params params.require(:contato).permit(:nome, :telefone, :email, :grupo_contato_id, :ativo, :observacao) end def registrar(detalhes) AuditoriaLog.registrar(user: current_user, acao: 'contato', entidade: 'Contato', dados_novos: { detalhes: detalhes }, request: request) end end