implantação da fase 2 e 3
This commit is contained in:
77
app/controllers/dashboard_controller.rb
Normal file
77
app/controllers/dashboard_controller.rb
Normal file
@@ -0,0 +1,77 @@
|
||||
# app/controllers/dashboard_controller.rb
|
||||
class DashboardController < ApplicationController
|
||||
def index
|
||||
skip_authorization
|
||||
|
||||
@data_referencia = params[:data] ? Date.parse(params[:data]) : Date.today
|
||||
@mes_inicio = @data_referencia.beginning_of_month
|
||||
@mes_fim = @data_referencia.end_of_month
|
||||
|
||||
carregar_dados_dashboard
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def carregar_dados_dashboard
|
||||
# Entregas do mês atual (da tabela read-only)
|
||||
entregas_mes = Entrega.do_mes(@data_referencia)
|
||||
|
||||
# Totais gerais
|
||||
@total_entregas = entregas_mes.count
|
||||
@entregas_pagas = entregas_mes.pagas.count
|
||||
@entregas_pendentes = @total_entregas - @entregas_pagas
|
||||
|
||||
# Configurações de preço
|
||||
config = Configuracao.mapa_de_precos
|
||||
|
||||
# Valor estimado total
|
||||
@valor_estimado = (@entregas_pagas * config[:entrega]).round(2)
|
||||
|
||||
# Por motorista (top 10)
|
||||
@motoristas = entregas_mes.pagas
|
||||
.group(:driver)
|
||||
.count
|
||||
.sort_by { |_, v| -v }
|
||||
.first(10)
|
||||
.map do |driver, qtd|
|
||||
{
|
||||
nome: driver,
|
||||
entregas: qtd,
|
||||
valor: (qtd * config[:entrega]).round(2)
|
||||
}
|
||||
end
|
||||
|
||||
# Por operação (route_id → contact_name)
|
||||
@por_operacao = entregas_mes.pagas
|
||||
.group(:contact_name)
|
||||
.count
|
||||
.sort_by { |_, v| -v }
|
||||
.first(6)
|
||||
|
||||
# Evolução diária do mês (para Chart.js)
|
||||
@grafico_diario = build_grafico_diario(entregas_mes, config[:entrega])
|
||||
|
||||
# Consolidações do mês
|
||||
@consolidacoes_mes = Consolidacao.do_mes(@data_referencia)
|
||||
@consolidacoes_abertas = @consolidacoes_mes.where(status: :aberta).count
|
||||
@consolidacoes_fechadas = @consolidacoes_mes.where(status: :fechada).count
|
||||
|
||||
# Histórico estimado mais recente
|
||||
@historico_recente = HistoricoEstimado.order(created_at: :desc).limit(5)
|
||||
end
|
||||
|
||||
def build_grafico_diario(entregas, preco_entrega)
|
||||
dias = ((@mes_inicio)..[@mes_fim, Date.today].min).map(&:to_s)
|
||||
|
||||
contagem = entregas.pagas
|
||||
.group("DATE(planned_date)")
|
||||
.count
|
||||
.transform_keys { |k| k.to_s }
|
||||
|
||||
labels = dias.map { |d| Date.parse(d).strftime('%d/%m') }
|
||||
valores = dias.map { |d| ((contagem[d] || 0) * preco_entrega).round(2) }
|
||||
qtds = dias.map { |d| contagem[d] || 0 }
|
||||
|
||||
{ labels: labels, valores: valores, qtds: qtds }
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user