Files
Reem-Notas/app/models/grupo_contato.rb

39 lines
1.2 KiB
Ruby

# app/models/grupo_contato.rb
#
# Grupo de destinatários (Diretoria, Operação, Motoristas, Cliente...). É o
# GRUPO que assina os eventos: cadastrar alguém novo é escolher o grupo, não
# repetir a configuração pessoa por pessoa.
class GrupoContato < ApplicationRecord
self.table_name = 'grupos_contato'
has_many :contatos, dependent: :nullify
has_many :assinaturas, class_name: 'GrupoEventoAssinatura', dependent: :destroy
has_many :eventos, through: :assinaturas, source: :evento_notificacao
validates :nome, presence: true
validate :nome_unico
scope :ativos, -> { where(ativo: true) }
scope :ordenados, -> { order(Arel.sql('LOWER(nome)')) }
before_validation { self.nome = nome.to_s.strip.squeeze(' ').presence }
# Contatos que devem receber ESTE evento por ESTE canal.
def destinatarios(canal)
return GrupoContato.none unless ativo?
contatos.ativos.com_canal(canal)
end
private
# Índice único é sobre LOWER(nome); validar aqui dá a mensagem amigável em vez
# de estourar RecordNotUnique na tela.
def nome_unico
return if nome.blank?
existe = GrupoContato.where.not(id: id).where('LOWER(nome) = ?', nome.downcase).exists?
errors.add(:nome, 'já existe') if existe
end
end