51 lines
1.5 KiB
Ruby
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
|