Implantação da geração de mensagem de forma livre e mudança na engine de mensagem
This commit is contained in:
50
app/services/analytics/resumo_operacao.rb
Normal file
50
app/services/analytics/resumo_operacao.rb
Normal file
@@ -0,0 +1,50 @@
|
||||
# app/services/analytics/resumo_operacao.rb
|
||||
#
|
||||
# Os números da operação num período, na forma que a mensagem agendada usa —
|
||||
# as MESMAS chaves que Notificacao::Variaveis anuncia no editor para o gatilho
|
||||
# `agendado`.
|
||||
#
|
||||
# Reusa OperacaoMetricas (visão Global) e NotasForaOperacao em vez de refazer as
|
||||
# queries: se a regra de contagem mudar num lugar, o resumo enviado por WhatsApp
|
||||
# não pode continuar dizendo outra coisa que o dashboard.
|
||||
module Analytics
|
||||
class ResumoOperacao
|
||||
def initialize(inicio:, fim:)
|
||||
@inicio = inicio.to_date
|
||||
@fim = fim.to_date
|
||||
end
|
||||
|
||||
# Valores como TEXTO: eles vão direto para dentro de uma mensagem.
|
||||
def numeros
|
||||
{
|
||||
'operacao' => rotulo_operacao,
|
||||
'entregues' => metricas.sucesso.to_s,
|
||||
'recusas' => metricas.recusas.to_s,
|
||||
'pendentes' => metricas.pendentes.to_s,
|
||||
'retentativas' => metricas.retentativas.to_s,
|
||||
'fora_operacao' => fora.total.to_s
|
||||
}
|
||||
end
|
||||
|
||||
# Nada mudou no período? Evita mandar resumo zerado num feriado.
|
||||
def vazio?
|
||||
metricas.total.zero? && fora.total.zero?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def tabelas = @tabelas ||= Operacao.nomes_validos
|
||||
|
||||
def rotulo_operacao
|
||||
tabelas.size == 1 ? Operacao.label(tabelas.first) : "Todas as operações (#{tabelas.size})"
|
||||
end
|
||||
|
||||
def metricas
|
||||
@metricas ||= OperacaoMetricas.new(tabelas: tabelas, inicio: @inicio, fim: @fim)
|
||||
end
|
||||
|
||||
def fora
|
||||
@fora ||= NotasForaOperacao.new(inicio: @inicio, fim: @fim)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user