From 1d0f666ead5734651743ad860884f1febe70428f Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 28 May 2026 10:10:11 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20query=20de=20categ?= =?UTF-8?q?orias=20do=20Flash=20de=20Contribui=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flash_contribuicao.module.ts | 139 +++++++++++++++++- 1 file changed, 138 insertions(+), 1 deletion(-) diff --git a/src/flash_contribuicao/flash_contribuicao.module.ts b/src/flash_contribuicao/flash_contribuicao.module.ts index 546a5e4..6440305 100644 --- a/src/flash_contribuicao/flash_contribuicao.module.ts +++ b/src/flash_contribuicao/flash_contribuicao.module.ts @@ -240,7 +240,144 @@ export default moduleFactory }, flash_categorias: (args) => { return { - sql: /*sql*/ ``, + sql: /*sql*/ ` + WITH params AS ( + SELECT + TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') AS data_contribuicao, + ${args.codigo_categoria_pai} AS codigo_categoria_pai, + ${args.cod_empresa} AS cod_empresa + FROM dual + ), + nodo_pai_param AS ( + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NOT NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.codigo = p.codigo_categoria_pai + AND (n.cod_empresa IN (${args.ctx_user_companies_for_module})) + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + ), + nodos_filtrados AS ( + SELECT filho.* + FROM tb_flash_nodo filho + JOIN nodo_pai_param pai_param + ON pai_param.id_nodo = filho.id_nodo_pai + CROSS JOIN params p + WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO') + AND filho.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR filho.cod_empresa = p.cod_empresa + ) + + UNION ALL + + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.ativo = 'S' + AND (n.cod_empresa IN (${args.ctx_user_companies_for_module})) + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + AND n.nivel = ( + SELECT MIN(n2.nivel) + FROM tb_flash_nodo n2 + WHERE n2.tipo_nodo = 'CATEGORIA' + AND n2.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR n2.cod_empresa = p.cod_empresa + ) + ) + ) + SELECT + x.tipo_nodo AS categoriaapp, + x.codigo AS cod_empresa, + x.nomeempresaapp AS nomeempresaapp, + CASE + WHEN GROUPING(x.codigo) = 1 THEN 1 + ELSE 0 + END AS is_total, + SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.vlr_contribuicao ELSE 0 END) AS contribuicao_dia, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) AS mes_atual, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_atual, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS mes_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_mes_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_mes_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS ano_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_ano_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_ano_anterior + FROM ( + SELECT + cat.codigo AS codigo, + cat.nome AS nomeempresaapp, + cat.tipo_nodo, + r.data_referencia, + r.valor_meta_efetiva, + r.vlr_contribuicao, + CASE + WHEN r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao + THEN 'ATUAL' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1) + AND ADD_MONTHS(p.data_contribuicao, -1) + THEN 'MES_ANTERIOR' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12) + AND ADD_MONTHS(p.data_contribuicao, -12) + THEN 'ANO_ANTERIOR' + END AS periodo + FROM tb_flash_nodo_resumo_contribuicao r + JOIN nodos_filtrados cat + ON cat.id_nodo = r.id_nodo + CROSS JOIN params p + WHERE ( + r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1) + AND ADD_MONTHS(p.data_contribuicao, -1) + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12) + AND ADD_MONTHS(p.data_contribuicao, -12) + ) + ) x + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp, x.tipo_nodo), + () + ) + ORDER BY + is_total, + nomeempresaapp + `, }; }, },