Imṕlantação do dash board de acompanhamento diario das entregas
This commit is contained in:
53
app/controllers/operacoes_dashboard_controller.rb
Normal file
53
app/controllers/operacoes_dashboard_controller.rb
Normal file
@@ -0,0 +1,53 @@
|
||||
# app/controllers/operacoes_dashboard_controller.rb
|
||||
#
|
||||
# Dashboard de análise de ENTREGAS por operação (separado do dashboard
|
||||
# financeiro). O operador escolhe uma operação (UBS Norte, EMAD, ...) e vê os
|
||||
# KPIs/insucessos/STS/mapa; também há os modos "global" (todas no período) e
|
||||
# "comparar" (uma operação vs outra). Os números vêm de Analytics::OperacaoMetricas.
|
||||
class OperacoesDashboardController < ApplicationController
|
||||
MODOS = %w[operacao global comparar].freeze
|
||||
|
||||
def index
|
||||
authorize :dashboard, :operacoes?
|
||||
|
||||
@periodo_inicio, @periodo_fim = periodo_selecionado
|
||||
@modo = MODOS.include?(params[:modo]) ? params[:modo] : 'operacao'
|
||||
@operacoes_agrupadas = Operacao.agrupadas_por_mes
|
||||
@tabelas_validas = Operacao.nomes_validos
|
||||
|
||||
case @modo
|
||||
when 'global'
|
||||
@metricas = montar(@tabelas_validas)
|
||||
when 'comparar'
|
||||
@op_a = Operacao.sanitizar([params[:op_a]]).first || @tabelas_validas[0]
|
||||
@op_b = Operacao.sanitizar([params[:op_b]]).first || @tabelas_validas[1]
|
||||
@metricas_a = montar([@op_a]) if @op_a
|
||||
@metricas_b = montar([@op_b]) if @op_b
|
||||
else
|
||||
@operacao = Operacao.sanitizar([params[:operacao]]).first || @tabelas_validas.first
|
||||
@metricas = montar([@operacao]) if @operacao
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def montar(tabelas)
|
||||
Analytics::OperacaoMetricas.new(tabelas: tabelas, inicio: @periodo_inicio, fim: @periodo_fim)
|
||||
end
|
||||
|
||||
# Faixa de datas do filtro (params inicio/fim). Default: início do mês → hoje.
|
||||
# Espelha DashboardController#periodo_selecionado.
|
||||
def periodo_selecionado
|
||||
inicio = parse_data(params[:inicio]) || Date.current.beginning_of_month
|
||||
fim = parse_data(params[:fim]) || Date.current
|
||||
inicio, fim = fim, inicio if fim < inicio
|
||||
[inicio, fim]
|
||||
end
|
||||
|
||||
def parse_data(str)
|
||||
return nil if str.blank?
|
||||
Date.parse(str)
|
||||
rescue ArgumentError, TypeError
|
||||
nil
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user