From eeacc8dad338c9ab4f522c3201a51bcb29907e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sarah=20Magalh=C3=A3es?= Date: Tue, 2 Jun 2026 16:38:18 -0300 Subject: [PATCH] Ajuste query flash categoria --- src/flash/flash.module.ts | 145 ++++++++++++++++++++------------------ 1 file changed, 75 insertions(+), 70 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index f706873..4f2825b 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -1057,77 +1057,82 @@ where 1 = 0`, flash_categorias: (args) => { return { sql: /*sql*/` - WITH Parametros AS ( - SELECT TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref, - TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AS dt_inicio_mes, - ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AS dt_inicio_mes_ant, - ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) AS dt_fim_mes_ant, - ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AS dt_inicio_ano_ant, - ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) AS dt_fim_ano_ant, - ${args.codigo_categoria_pai} AS id_nodo_pai, - ${args.cod_empresa} AS cod_empresa - FROM DUAL - ), - filhos AS ( - SELECT n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel, - n.cod_empresa, n.ordem_exibicao - FROM VERDEMAR.TB_FLASH_NODO n - CROSS JOIN Parametros p - WHERE n.ativo = 'S' - AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA') - OR (p.id_nodo_pai IS NOT NULL AND n.id_nodo_pai = p.id_nodo_pai) ) - AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa) - ), - Vendas AS ( - SELECT f.id_nodo, - f.codigo, - f.nome, - f.tipo_nodo, - f.nivel, - f.cod_empresa, - f.ordem_exibicao, - r.data_referencia AS data, - r.valor_venda AS venda - FROM filhos f - JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo - CROSS JOIN Parametros p - WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref - OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant - OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant) - ), - Agrupado AS ( - SELECT - v.id_nodo, - v.codigo, - MAX(v.nome) AS nome, - MAX(v.tipo_nodo) AS tipo_nodo, - MAX(v.nivel) AS nivel, - MAX(v.cod_empresa) AS cod_empresa, - MAX(v.ordem_exibicao) AS ordem_exibicao, - GROUPING(v.id_nodo) AS is_total, - SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.venda ELSE 0 END) AS v_mes, - SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.venda ELSE 0 END) AS v_mes_ant, - SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.venda ELSE 0 END) AS v_ano_ant - FROM Vendas v - CROSS JOIN Parametros p - GROUP BY GROUPING SETS ((v.id_nodo, v.codigo), ()) - ) + WITH Parametros_Base AS ( + SELECT + TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref, + ${args.codigo_categoria_pai} AS id_nodo_pai, + ${args.cod_empresa} AS cod_empresa + FROM DUAL + ), + Parametros AS ( + SELECT + dt_ref, + TRUNC(dt_ref, 'MM') AS dt_inicio_mes, + ADD_MONTHS(TRUNC(dt_ref, 'MM'), -1) AS dt_inicio_mes_ant, + ADD_MONTHS(dt_ref, -1) AS dt_fim_mes_ant, + ADD_MONTHS(TRUNC(dt_ref, 'MM'), -12) AS dt_inicio_ano_ant, + ADD_MONTHS(dt_ref, -12) AS dt_fim_ano_ant, + id_nodo_pai, + cod_empresa + FROM Parametros_Base + ), + filhos AS ( + SELECT + n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel, + n.cod_empresa, n.ordem_exibicao + FROM VERDEMAR.TB_FLASH_NODO n + CROSS JOIN Parametros p + WHERE n.ativo = 'S' + AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA') + OR (p.id_nodo_pai IS NOT NULL AND n.id_nodo_pai = p.id_nodo_pai) ) + AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa) + ), + Vendas AS ( + SELECT + f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel, + f.cod_empresa, f.ordem_exibicao, + r.data_referencia AS data, + r.valor_venda AS venda + FROM filhos f + JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo + CROSS JOIN Parametros p + WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref + OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant + OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant) + ), + Agrupado AS ( SELECT - codigo AS cod_nodo, - nome AS nome_nodo, - tipo_nodo, - nivel, - cod_empresa, - is_total, - v_mes AS mes_atual, - v_mes_ant AS mes_anterior, - (v_mes - v_mes_ant) AS dif_mes_anterior, - ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior, - v_ano_ant AS ano_anterior, - (v_mes - v_ano_ant) AS dif_ano_anterior, - ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior - FROM Agrupado - ORDER BY is_total, ordem_exibicao NULLS LAST, nome_nodo + v.id_nodo, + v.codigo, + MAX(v.nome) AS nome, + MAX(v.tipo_nodo) AS tipo_nodo, + MAX(v.nivel) AS nivel, + MAX(v.cod_empresa) AS cod_empresa, + MAX(v.ordem_exibicao) AS ordem_exibicao, + GROUPING(v.id_nodo) AS is_total, + SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.venda ELSE 0 END) AS v_mes, + SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.venda ELSE 0 END) AS v_mes_ant, + SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.venda ELSE 0 END) AS v_ano_ant + FROM Vendas v + CROSS JOIN Parametros p + GROUP BY GROUPING SETS ((v.id_nodo, v.codigo), ()) + ) + SELECT + codigo AS cod_nodo, + nome AS nome_nodo, + tipo_nodo, + nivel, + cod_empresa, + is_total, + v_mes AS mes_atual, + v_mes_ant AS mes_anterior, + (v_mes - v_mes_ant) AS dif_mes_anterior, + ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior, + v_ano_ant AS ano_anterior, + (v_mes - v_ano_ant) AS dif_ano_anterior, + ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior + FROM Agrupado + ORDER BY is_total, ordem_exibicao NULLS LAST, nome_nodo ` } },