Files
Reem-Notas/app/services/analytics/resumo_operacao.rb

51 lines
1.5 KiB
Ruby

# 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