Atualização do Para correção do valor do dash da operação

This commit is contained in:
2026-08-26 10:56:07 -03:00
parent e272b96d0c
commit 8d24a57579
3 changed files with 50 additions and 20 deletions

View File

@@ -35,13 +35,19 @@ class OperacoesDashboardController < ApplicationController
@metricas_a = montar([@op_a]) if @op_a
@metricas_b = montar([@op_b]) if @op_b
else
# Operação única. Sem datas na URL o recorte é a operação inteira (o
# período vem dos próprios dados) — é o que mantém utilizável abrir uma
# operação de meses atrás. Quando o operador ESCOLHE um período, ele passa
# a valer aqui também: sem isso, comparar esta tela com o dashboard
# financeiro "no mesmo período" era impossível, porque a data era ignorada.
# Operação única: o recorte é SEMPRE a operação inteira, mesmo com
# inicio/fim na URL. É o que confere com os documentos físicos e com a
# planilha entregue ao cliente (Analytics::PlanilhaEntregas também não
# filtra data). Recortar pelo período derrubava as entregas que a operação
# executou fora do mês do nome dela — EMAD AGO 2026 rodou de 30/07 a
# 12/08, e "01/08 → hoje" mostrava 1146 das 2021 NFs.
#
# O período escolhido continua tendo função aqui: alimenta as "Notas fora
# da operação" e aparece no cabeçalho como REFERÊNCIA (quantas NFs da
# operação caíram na faixa), para comparar com o dashboard financeiro sem
# mexer no número que o cliente confere.
@operacao = Operacao.sanitizar([params[:operacao]]).first || @tabelas_validas.first
@metricas = montar([@operacao], filtros: @filtros, data: @data_filtro, **faixa_ativa) if @operacao
@metricas = montar([@operacao], filtros: @filtros, data: @data_filtro) if @operacao
@fora_operacao = Analytics::NotasForaOperacao.new(inicio: @periodo_inicio, fim: @periodo_fim) if @periodo_explicito
end
end
@@ -63,8 +69,10 @@ class OperacoesDashboardController < ApplicationController
if @modo == 'global'
@metricas = montar(@tabelas_validas, inicio: @periodo_inicio, fim: @periodo_fim, filtros: @filtros, data: @data_filtro)
else
# Mesma regra do #index: operação = operação inteira (a planilha espelho
# tem que bater com a que é entregue ao cliente).
@operacao = Operacao.sanitizar([params[:operacao]]).first || @tabelas_validas.first
@metricas = montar([@operacao], filtros: @filtros, data: @data_filtro, **faixa_ativa) if @operacao
@metricas = montar([@operacao], filtros: @filtros, data: @data_filtro) if @operacao
end
montar_tabela_espelho if @metricas
@@ -108,20 +116,12 @@ class OperacoesDashboardController < ApplicationController
@espelho_linhas = linhas[(@espelho_pagina - 1) * ESPELHO_POR_PAGINA, ESPELHO_POR_PAGINA] || []
end
# Período escolhido pelo operador (veio na URL) x default da tela. o
# explícito é aplicado no modo Operação — ver o comentário no #index.
# Período escolhido pelo operador (veio na URL) x default da tela. No modo
# Operação ele não recorta os KPIs — ver o comentário no #index.
def periodo_explicito?
params[:inicio].present? || params[:fim].present?
end
# Faixa a repassar para as métricas no modo Operação: vazia quando o operador
# não escolheu período (aí o recorte é a operação inteira).
def faixa_ativa
return {} unless @periodo_explicito
{ inicio: @periodo_inicio, fim: @periodo_fim }
end
def montar(tabelas, inicio: nil, fim: nil, filtros: {}, data: nil)
Analytics::OperacaoMetricas.new(tabelas: tabelas, inicio: inicio, fim: fim, filtros: filtros, data: data)
end