diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 8d5f819..5e2a5d2 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -78,8 +78,77 @@ export default moduleFactory }, params: ["data_venda"], }, + flash_categorias: { + name: "Flash de Vendas por Categorias", + display: { + type: "flash", + settings: { + group_column: "categoriaapp", + total_indicator_column: "is_total", + null_label_key: "Geral", + }, + header: { + title_column: "categoriaapp", + value_column: "venda_dia", + value_format: "currency", + }, + rows: [ + { + label: "Meta Mês", + column: "meta_mes", + format: "currency_short", + }, + { + label: "Mês Atual", + column: "mes_atual", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_atual", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_atual", + format: "percentage", + }, + { + label: "Mês Anterior", + column: "mes_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_mes_anterior", + format: "percentage", + }, + { + label: "Ano Anterior", + column: "ano_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_ano_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_ano_anterior", + format: "percentage", + }, + ], + }, + params: ["data_venda", "codigo_categoria_pai", "cod_empresa"], + }, }, - entrypoint: "flash", + entrypoint: "flash" as "flash" | "flash_categorias", }) .withImplementations({ C5: { @@ -113,6 +182,27 @@ group by rollup(canalapp, nomeempresaapp) order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` +select + 'Categorias' as categoriaapp, + 1 as is_total, + 0 as venda_dia, + 0 as meta_mes, + 0 as mes_atual, + 0 as dif_mes_atual, + 0 as variacao_atual, + 0 as mes_anterior, + 0 as dif_mes_anterior, + 0 as variacao_mes_anterior, + 0 as ano_anterior, + 0 as dif_ano_anterior, + 0 as variacao_ano_anterior +from dual +where 1 = 0`, + }; + }, }, C5_big: {flash: (args) => { return { @@ -196,8 +286,185 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, ) `,}; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` + WITH params AS ( + SELECT + TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS data_venda, + ${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 ( + 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 ( + 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 + 'Categorias' AS canalapp, + + 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.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - 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.valor_venda 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.valor_venda ELSE 0 END) AS 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, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_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 = 'MES_ANTERIOR' THEN x.valor_venda 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.valor_venda ELSE 0 END) AS ano_anterior, + + 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, + 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 + + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp), + () + ) + + ORDER BY + is_total, + nomeempresaapp; + `,}; + }, }, C5_mambo: {flash: (args) => { + return { + sql: /*sql*/ ``,}; + }, + flash_categorias: (args) => { return { sql: /*sql*/ ``,}; },