Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
38
app/models/grupo_contato.rb
Normal file
38
app/models/grupo_contato.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user