This commit is contained in:
+82
-89
@@ -1354,102 +1354,95 @@ where 1 = 0`,
|
|||||||
flash_vendas_categoria_ai: (args)=> {
|
flash_vendas_categoria_ai: (args)=> {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/`
|
sql: /*sql*/`
|
||||||
WITH Parametros_Base AS (
|
WITH params AS (
|
||||||
SELECT
|
SELECT
|
||||||
TO_DATE(\${args.data_venda}, 'YYYY-MM-DD') AS data_venda,
|
COALESCE(TO_DATE(NULLIF('{{DATA_VENDA}}', ${args.data_venda}), 'YYYY-MM-DD'), TRUNC(SYSDATE)) AS data_venda,
|
||||||
\${args.codigo_categoria_pai} AS codigo_categoria_pai,
|
NULLIF('{{CATEGORIA_PAI}}', null) AS codigo_categoria_pai
|
||||||
\${args.cod_empresa} AS cod_empresa
|
FROM dual
|
||||||
FROM DUAL
|
|
||||||
),
|
),
|
||||||
Parametros AS (
|
nodo_pai_param AS (
|
||||||
SELECT
|
SELECT n.*
|
||||||
data_venda,
|
FROM tb_flash_nodo n
|
||||||
TRUNC(data_venda, 'MM') AS dt_inicio_mes,
|
CROSS JOIN params p
|
||||||
ADD_MONTHS(TRUNC(data_venda, 'MM'), -1) AS dt_inicio_mes_ant,
|
WHERE p.codigo_categoria_pai IS NOT NULL
|
||||||
ADD_MONTHS(data_venda, -1) AS dt_fim_mes_ant,
|
AND n.tipo_nodo = 'CATEGORIA'
|
||||||
ADD_MONTHS(TRUNC(data_venda, 'MM'), -12) AS dt_inicio_ano_ant,
|
AND n.codigo = p.codigo_categoria_pai
|
||||||
ADD_MONTHS(data_venda, -12) AS dt_fim_ano_ant,
|
AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
|
||||||
codigo_categoria_pai,
|
|
||||||
cod_empresa
|
|
||||||
FROM Parametros_Base
|
|
||||||
),
|
),
|
||||||
filhos AS (
|
nodos_filtrados AS (
|
||||||
SELECT
|
SELECT filho.*
|
||||||
n.id_nodo,
|
FROM tb_flash_nodo filho
|
||||||
CASE
|
JOIN nodo_pai_param pai_param
|
||||||
WHEN p.cod_empresa IS NULL THEN
|
ON pai_param.id_nodo = filho.id_nodo_pai
|
||||||
MIN(n.ID_NODO) OVER (PARTITION BY n.nome)
|
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
|
||||||
ELSE
|
AND filho.ativo = 'S'
|
||||||
n.ID_NODO
|
|
||||||
END AS codigo,
|
UNION ALL
|
||||||
n.nome, n.tipo_nodo, n.nivel,
|
|
||||||
n.cod_empresa, n.ordem_exibicao
|
SELECT n.*
|
||||||
FROM VERDEMAR.TB_FLASH_NODO n
|
FROM tb_flash_nodo n
|
||||||
CROSS JOIN Parametros p
|
CROSS JOIN params p
|
||||||
WHERE n.ativo = 'S'
|
WHERE p.codigo_categoria_pai IS NULL
|
||||||
AND n.cod_empresa IN (\${args.ctx_user_companies_for_module})
|
AND n.tipo_nodo = 'CATEGORIA'
|
||||||
AND ( (p.codigo_categoria_pai IS NULL AND n.tipo_nodo = 'CATEGORIA' AND n.NIVEL = 2)
|
AND n.ativo = 'S'
|
||||||
OR (p.codigo_categoria_pai IS NOT NULL AND n.id_nodo_pai IN (
|
AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
|
||||||
SELECT pai.id_nodo
|
AND n.nivel = (
|
||||||
FROM VERDEMAR.TB_FLASH_NODO pai
|
SELECT MIN(n2.nivel)
|
||||||
WHERE pai.nome = (SELECT nome FROM VERDEMAR.TB_FLASH_NODO WHERE id_nodo = p.codigo_categoria_pai)
|
FROM tb_flash_nodo n2
|
||||||
)) )
|
WHERE n2.tipo_nodo = 'CATEGORIA'
|
||||||
AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa)
|
AND n2.ativo = 'S'
|
||||||
),
|
)
|
||||||
Vendas_Metas 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,
|
|
||||||
0 AS meta
|
|
||||||
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.data_venda
|
|
||||||
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.codigo AS codigo,
|
|
||||||
MAX(v.nome) AS nome,
|
|
||||||
MAX(v.tipo_nodo) AS tipo_nodo,
|
|
||||||
MAX(v.nivel) AS nivel,
|
|
||||||
MAX(v.ordem_exibicao) AS ordem_exibicao,
|
|
||||||
GROUPING(v.codigo) AS is_total,
|
|
||||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.data_venda 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,
|
|
||||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.data_venda THEN v.meta ELSE 0 END) AS m_mes,
|
|
||||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.meta ELSE 0 END) AS m_mes_ant,
|
|
||||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.meta ELSE 0 END) AS m_ano_ant
|
|
||||||
FROM Vendas_Metas v
|
|
||||||
CROSS JOIN Parametros p
|
|
||||||
GROUP BY GROUPING SETS ((v.codigo, p.cod_empresa), ())
|
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
nome AS nomeempresaapp,
|
:agrupamento AS KEY_FIELD,
|
||||||
tipo_nodo AS canalapp,
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes,
|
||||||
codigo AS cod_empresa,
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
|
||||||
is_total,
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS dif_mes_atual,
|
||||||
m_mes AS meta_mes,
|
|
||||||
v_mes AS mes_atual,
|
|
||||||
(v_mes - m_mes) AS dif_mes_atual,
|
|
||||||
CASE
|
CASE
|
||||||
WHEN m_mes = 0 THEN 0
|
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0
|
||||||
ELSE ROUND(((v_mes / m_mes) * 100) - 100, 2)
|
ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / (SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02)) * 100) - 100, 2)
|
||||||
END AS variacao_atual,
|
END AS variacao_atual,
|
||||||
m_mes_ant AS meta_mes_anterior,
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior,
|
||||||
v_mes_ant AS mes_anterior,
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
|
||||||
(v_mes - v_mes_ant) AS dif_mes_anterior,
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
|
||||||
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior,
|
CASE
|
||||||
m_ano_ant AS meta_ano_anterior,
|
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
v_ano_ant AS ano_anterior,
|
ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100, 2)
|
||||||
(v_mes - v_ano_ant) AS dif_ano_anterior,
|
END AS variacao_mes_anterior,
|
||||||
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
|
||||||
FROM Agrupado
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
|
||||||
ORDER BY is_total, ordem_exibicao NULLS LAST, nomeempresaapp
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100, 2)
|
||||||
|
END AS variacao_ano_anterior
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
cat.codigo AS codigo,
|
||||||
|
cat.nome AS nomeempresaapp,
|
||||||
|
cat.codigo || ' - ' || cat.nome AS categoria_formatada,
|
||||||
|
cat.tipo_nodo,
|
||||||
|
cat.cod_empresa,
|
||||||
|
r.valor_meta_efetiva,
|
||||||
|
r.valor_venda,
|
||||||
|
CASE
|
||||||
|
WHEN r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda THEN 'ATUAL'
|
||||||
|
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) AND ADD_MONTHS(p.data_venda, -1) THEN 'MES_ANTERIOR'
|
||||||
|
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) AND ADD_MONTHS(p.data_venda, -12) THEN 'ANO_ANTERIOR'
|
||||||
|
END AS periodo
|
||||||
|
FROM tb_flash_nodo_resumo_venda r
|
||||||
|
JOIN nodos_filtrados cat ON cat.id_nodo = r.id_nodo
|
||||||
|
CROSS JOIN params p
|
||||||
|
WHERE (
|
||||||
|
r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
|
||||||
|
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) AND ADD_MONTHS(p.data_venda, -1)
|
||||||
|
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) AND ADD_MONTHS(p.data_venda, -12)
|
||||||
|
)
|
||||||
|
) x
|
||||||
|
WHERE 1=1
|
||||||
|
--FILTROS--
|
||||||
|
GROUP BY :agrupamento
|
||||||
|
ORDER BY mes_atual DESC
|
||||||
|
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user