From 8f5182cec2ee2f84814fd3194826dd9de52b8470 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Fri, 29 May 2026 19:23:00 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20migrations=20de=20?= =?UTF-8?q?objetos=20de=20banco=20de=20dados.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...430000013_prc_flash_carga_resumo_venda.sql | 107 --- ...30000014_prc_flash_atualiza_venda_dono.sql | 81 -- ...0430000015_prc_flash_carga_dados_venda.sql | 228 ----- ...11_prc_flash_carga_resumo_contribuicao.sql | 119 --- ...013_prc_flash_carga_dados_contribuicao.sql | 444 --------- ...001_prc_flash_carga_dados_contribuicao.sql | 866 ------------------ ...004_prc_flash_carga_dados_contribuicao.sql | 415 --------- ...520000011_prc_flash_carga_resumo_perda.sql | 107 --- ...0520000013_prc_flash_carga_dados_perda.sql | 186 ---- ..._tb_flash_fato_venda_add_nome_segmento.sql | 24 - ...0522000002_prc_flash_carga_dados_venda.sql | 499 ---------- ...b_flash_nodo_resumo_venda_add_segmento.sql | 45 - ...522000004_prc_flash_carga_resumo_venda.sql | 113 --- ...l => 20260529000001_seq_tb_flash_nodo.sql} | 0 ...o.sql => 20260529000002_tb_flash_nodo.sql} | 58 +- ...0260529000003_seq_tb_flash_fato_venda.sql} | 0 ...=> 20260529000004_tb_flash_fato_venda.sql} | 74 +- ...0260529000005_seq_tb_flash_meta_venda.sql} | 0 ...=> 20260529000006_tb_flash_meta_venda.sql} | 32 +- ...0260529000007_tb_flash_meta_venda_stg.sql} | 34 +- ...0260529000008_vw_flash_meta_venda_stg.sql} | 0 ...000009_seq_tb_flash_nodo_resumo_venda.sql} | 0 ...0529000010_tb_flash_nodo_resumo_venda.sql} | 44 +- ...000011_prc_flash_carga_meta_venda_stg.sql} | 2 +- ...0529000012_prc_flash_carga_meta_venda.sql} | 2 +- ...529000013_prc_flash_carga_resumo_venda.sql | 112 +++ ...0529000014_prc_flash_carga_dados_venda.sql | 111 +++ ...9000015_prc_flash_atualiza_venda_dono.sql} | 41 +- ...000016_seq_tb_flash_fato_contribuicao.sql} | 1 - ...0529000017_tb_flash_fato_contribuicao.sql} | 81 +- ...000018_seq_tb_flash_meta_contribuicao.sql} | 0 ...0529000019_tb_flash_meta_contribuicao.sql} | 32 +- ...000020_tb_flash_meta_contribuicao_stg.sql} | 35 +- ...000021_vw_flash_meta_contribuicao_stg.sql} | 1 - ...seq_tb_flash_nodo_resumo_contribuicao.sql} | 1 - ...023_tb_flash_nodo_resumo_contribuicao.sql} | 53 +- ...prc_flash_carga_meta_contribuicao_stg.sql} | 2 +- ...025_prc_flash_carga_meta_contribuicao.sql} | 2 +- ...26_prc_flash_carga_resumo_contribuicao.sql | 117 +++ ...027_prc_flash_carga_dados_contribuicao.sql | 105 +++ ..._prc_flash_atualiza_contribuicao_dono.sql} | 53 +- ...0260529000029_seq_tb_flash_fato_perda.sql} | 0 ...=> 20260529000030_tb_flash_fato_perda.sql} | 76 +- ...0260529000031_seq_tb_flash_meta_perda.sql} | 0 ...=> 20260529000032_tb_flash_meta_perda.sql} | 32 +- ...0260529000033_tb_flash_meta_perda_stg.sql} | 32 +- ...0260529000034_vw_flash_meta_perda_stg.sql} | 22 +- ...000035_seq_tb_flash_nodo_resumo_perda.sql} | 0 ...0529000036_tb_flash_nodo_resumo_perda.sql} | 44 +- ...000037_prc_flash_carga_meta_perda_stg.sql} | 2 +- ...0529000038_prc_flash_carga_meta_perda.sql} | 2 +- ...529000039_prc_flash_carga_resumo_perda.sql | 124 +++ ...0529000040_prc_flash_carga_dados_perda.sql | 76 ++ ...9000041_prc_flash_atualiza_perda_dono.sql} | 52 +- 54 files changed, 1064 insertions(+), 3625 deletions(-) delete mode 100644 migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql delete mode 100644 migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql delete mode 100644 migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql delete mode 100644 migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql delete mode 100644 migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql delete mode 100644 migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql delete mode 100644 migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql delete mode 100644 migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql delete mode 100644 migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql delete mode 100644 migrations/C5/20260522000001_tb_flash_fato_venda_add_nome_segmento.sql delete mode 100644 migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql delete mode 100644 migrations/C5/20260522000003_tb_flash_nodo_resumo_venda_add_segmento.sql delete mode 100644 migrations/C5/20260522000004_prc_flash_carga_resumo_venda.sql rename migrations/C5/{20260430000001_seq_tb_flash_nodo.sql => 20260529000001_seq_tb_flash_nodo.sql} (100%) rename migrations/C5/{20260430000002_tb_flash_nodo.sql => 20260529000002_tb_flash_nodo.sql} (57%) rename migrations/C5/{20260430000003_seq_tb_flash_fato_venda.sql => 20260529000003_seq_tb_flash_fato_venda.sql} (100%) rename migrations/C5/{20260430000004_tb_flash_fato_venda.sql => 20260529000004_tb_flash_fato_venda.sql} (54%) rename migrations/C5/{20260430000005_seq_tb_flash_meta_venda.sql => 20260529000005_seq_tb_flash_meta_venda.sql} (100%) rename migrations/C5/{20260430000006_tb_flash_meta_venda.sql => 20260529000006_tb_flash_meta_venda.sql} (70%) rename migrations/C5/{20260430000007_tb_flash_meta_venda_stg.sql => 20260529000007_tb_flash_meta_venda_stg.sql} (62%) rename migrations/C5/{20260430000008_vw_flash_meta_venda_stg.sql => 20260529000008_vw_flash_meta_venda_stg.sql} (100%) rename migrations/C5/{20260430000009_seq_tb_flash_nodo_resumo_venda.sql => 20260529000009_seq_tb_flash_nodo_resumo_venda.sql} (100%) rename migrations/C5/{20260430000010_tb_flash_nodo_resumo_venda.sql => 20260529000010_tb_flash_nodo_resumo_venda.sql} (62%) rename migrations/C5/{20260430000011_prc_flash_carga_meta_venda_stg.sql => 20260529000011_prc_flash_carga_meta_venda_stg.sql} (94%) rename migrations/C5/{20260430000012_prc_flash_carga_meta_venda.sql => 20260529000012_prc_flash_carga_meta_venda.sql} (98%) create mode 100644 migrations/C5/20260529000013_prc_flash_carga_resumo_venda.sql create mode 100644 migrations/C5/20260529000014_prc_flash_carga_dados_venda.sql rename migrations/C5/{20260522000006_prc_flash_atualiza_venda_dono.sql => 20260529000015_prc_flash_atualiza_venda_dono.sql} (65%) rename migrations/C5/{20260507000001_seq_tb_flash_fato_contribuicao.sql => 20260529000016_seq_tb_flash_fato_contribuicao.sql} (99%) rename migrations/C5/{20260507000002_tb_flash_fato_contribuicao.sql => 20260529000017_tb_flash_fato_contribuicao.sql} (58%) rename migrations/C5/{20260507000016_seq_tb_flash_meta_contribuicao.sql => 20260529000018_seq_tb_flash_meta_contribuicao.sql} (100%) rename migrations/C5/{20260507000017_tb_flash_meta_contribuicao.sql => 20260529000019_tb_flash_meta_contribuicao.sql} (70%) rename migrations/C5/{20260507000014_tb_flash_meta_contribuicao_stg.sql => 20260529000020_tb_flash_meta_contribuicao_stg.sql} (63%) rename migrations/C5/{20260507000015_vw_flash_meta_contribuicao_stg.sql => 20260529000021_vw_flash_meta_contribuicao_stg.sql} (99%) rename migrations/C5/{20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql => 20260529000022_seq_tb_flash_nodo_resumo_contribuicao.sql} (99%) rename migrations/C5/{20260507000010_tb_flash_nodo_resumo_contribuicao.sql => 20260529000023_tb_flash_nodo_resumo_contribuicao.sql} (59%) rename migrations/C5/{20260513000002_prc_flash_carga_meta_contribuicao_stg.sql => 20260529000024_prc_flash_carga_meta_contribuicao_stg.sql} (94%) rename migrations/C5/{20260513000003_prc_flash_carga_meta_contribuicao.sql => 20260529000025_prc_flash_carga_meta_contribuicao.sql} (98%) create mode 100644 migrations/C5/20260529000026_prc_flash_carga_resumo_contribuicao.sql create mode 100644 migrations/C5/20260529000027_prc_flash_carga_dados_contribuicao.sql rename migrations/C5/{20260507000012_prc_flash_atualiza_contribuicao_dono.sql => 20260529000028_prc_flash_atualiza_contribuicao_dono.sql} (56%) rename migrations/C5/{20260520000001_seq_tb_flash_fato_perda.sql => 20260529000029_seq_tb_flash_fato_perda.sql} (100%) rename migrations/C5/{20260520000002_tb_flash_fato_perda.sql => 20260529000030_tb_flash_fato_perda.sql} (60%) rename migrations/C5/{20260520000003_seq_tb_flash_meta_perda.sql => 20260529000031_seq_tb_flash_meta_perda.sql} (100%) rename migrations/C5/{20260520000004_tb_flash_meta_perda.sql => 20260529000032_tb_flash_meta_perda.sql} (70%) rename migrations/C5/{20260520000005_tb_flash_meta_perda_stg.sql => 20260529000033_tb_flash_meta_perda_stg.sql} (66%) rename migrations/C5/{20260520000006_vw_flash_meta_perda_stg.sql => 20260529000034_vw_flash_meta_perda_stg.sql} (50%) rename migrations/C5/{20260520000007_seq_tb_flash_nodo_resumo_perda.sql => 20260529000035_seq_tb_flash_nodo_resumo_perda.sql} (100%) rename migrations/C5/{20260520000008_tb_flash_nodo_resumo_perda.sql => 20260529000036_tb_flash_nodo_resumo_perda.sql} (62%) rename migrations/C5/{20260520000009_prc_flash_carga_meta_perda_stg.sql => 20260529000037_prc_flash_carga_meta_perda_stg.sql} (94%) rename migrations/C5/{20260520000010_prc_flash_carga_meta_perda.sql => 20260529000038_prc_flash_carga_meta_perda.sql} (98%) create mode 100644 migrations/C5/20260529000039_prc_flash_carga_resumo_perda.sql create mode 100644 migrations/C5/20260529000040_prc_flash_carga_dados_perda.sql rename migrations/C5/{20260520000012_prc_flash_atualiza_perda_dono.sql => 20260529000041_prc_flash_atualiza_perda_dono.sql} (55%) diff --git a/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql b/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql deleted file mode 100644 index 9127cbf..0000000 --- a/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql +++ /dev/null @@ -1,107 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA ( - p_data_inicial IN DATE, - p_data_final IN DATE -) AS -BEGIN - DELETE FROM TB_FLASH_NODO_RESUMO_VENDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; - - INSERT INTO TB_FLASH_NODO_RESUMO_VENDA ( - id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, - valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, - percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, - desvio, percentual_atingimento, data_apuracao - ) - WITH datas AS ( - SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia - FROM dual - CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final) - ), - venda_direta AS ( - SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, - f.ano_referencia, f.mes_referencia, f.dia_referencia, - SUM(f.vlr_venda) AS valor_venda - FROM TB_FLASH_FATO_VENDA f - WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia - ), - venda_hierarquia AS ( - SELECT a.id_nodo_ancestral AS id_nodo, - d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, - SUM(NVL(vd.valor_venda, 0)) AS valor_venda - FROM ( - SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, - n.id_nodo AS id_nodo_descendente - FROM TB_FLASH_NODO n - CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai - ) a - CROSS JOIN datas d - LEFT JOIN venda_direta vd - ON vd.id_nodo = a.id_nodo_descendente - AND vd.data_referencia = d.data_referencia - GROUP BY a.id_nodo_ancestral, d.data_referencia - ), - meta_propria_diaria AS ( - SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, - MAX(m.percentual_meta) AS percentual_meta_propria, - SUM(m.valor_meta) AS valor_meta_propria - FROM TB_FLASH_META_VENDA m - WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia - ), - meta_filhos_diaria AS ( - SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, - SUM(mpd.valor_meta_propria) AS valor_meta_filhos - FROM TB_FLASH_NODO pai - JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo - JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo - GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia - ), - base AS ( - SELECT n.id_nodo, d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia - FROM TB_FLASH_NODO n - CROSS JOIN datas d - ) - SELECT SEQ_TB_FLASH_NODO_RESUMO_VENDA.NEXTVAL, - b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, - vh.valor_venda, - mpd.valor_meta_propria, - mfd.valor_meta_filhos, - CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, - mpd.percentual_meta_propria, - CAST(NULL AS NUMBER(10,4)), - CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, - NVL(vh.valor_venda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), - CASE - WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL - ELSE (NVL(vh.valor_venda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 - END, - SYSDATE - FROM base b - LEFT JOIN venda_hierarquia vh ON vh.id_nodo = b.id_nodo AND vh.data_referencia = b.data_referencia - LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia - LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_VENDA' AND object_type = 'PROCEDURE'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql b/migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql deleted file mode 100644 index 3bb8289..0000000 --- a/migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql +++ /dev/null @@ -1,81 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO_DONO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa_ini IN NUMBER DEFAULT NULL, - p_empresa_fim IN NUMBER DEFAULT NULL -) AS - v_inicio_execucao DATE := SYSDATE; -BEGIN - DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA_DONO_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS')); - DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); - - FOR r IN ( - SELECT codigo - FROM vitruvio.vi_lojas - WHERE codigo NOT IN (301, 401, 500) - AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini) - AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim) - ORDER BY codigo - ) LOOP - BEGIN - DBMS_OUTPUT.PUT_LINE('Carregando venda da empresa: ' || r.codigo); - - PRC_FLASH_CARGA_DADOS_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final, - p_empresa => r.codigo - ); - - EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE( - 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM - ); - RAISE; - END; - END LOOP; - - DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de venda...'); - - PRC_FLASH_CARGA_META_VENDA_STG( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('Carregando metas finais de venda...'); - - PRC_FLASH_CARGA_META_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('Atualizando resumo de venda...'); - - PRC_FLASH_CARGA_RESUMO_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); - DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); - -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA_DONO: ' || SQLERRM); - RAISE; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql b/migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql deleted file mode 100644 index 5173aef..0000000 --- a/migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql +++ /dev/null @@ -1,228 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_VENDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT dv.nrodivisao, - seg1.nrosegmento, - seg1.descsegmento, - e.nroempresa AS empresa, - e.nomereduzido AS nomeempresa, - a.seqproduto AS cod_produto, - a.seqprodutobase, - a.desccompleta AS descricao, - z.dtaentradasaida AS data_referencia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'D')) AS dia_semana, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'DD')) AS dia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'MM')) AS mes, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'YYYY')) AS ano, - 0 AS nro_tickets, - SUM(DECODE(y.qtdvda, 0, 0, - ((y.vlrimpostovda + - NVL(DECODE(pg.indutilicmstaresugprabc, - 'S', COALESCE(y.vlricmsvdasolicit, y.vlricmsvda), - y.vlricmsvda), 0) - + NVL(y.vlrpisvda, 0) - + NVL(y.vlrcofinsvda, 0)) / y.qtdvda)) * z.qtdvda) - + - SUM(DECODE(NVL(y.qtddevol, 0), 0, 0, - ((NVL(y.vlrimpostodevol, 0) + - NVL(DECODE(pg.indutilicmstaresugprabc, - 'S', - DECODE(y.qtdvda, 0, 0, - COALESCE((y.vlricmsvdasolicit / y.qtdvda) * y.qtddevol, - y.vlricmsdevol)), - ((z.vlricmsvda / GREATEST(z.qtdvda, 1)) * NVL(z.qtddevol, 0))), - 0) - + NVL(y.vlrpisdevol, 0) - + NVL(y.vlrcofinsdevol, 0)) / y.qtddevol)) * (0 - NVL(z.qtddevol, 0)) - ) AS vlr_imp_venda, - SUM((z.qtdvda - NVL(z.qtddevol, 0)) / k.qtdembalagem) AS qtde_venda, - (SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda, - 0 AS vl_ticket_medio, - a.propqtdprodutobase, - ( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1, - ( SELECT cc.categoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1, - ( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2, - ( SELECT cc.categoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2, - ( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3, - ( SELECT cc.categoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3, - ( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4, - ( SELECT cc.categoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4, - ( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5, - ( SELECT cc.categoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5 - FROM consinco.maxv_categoria g, consinco.map_famdivcateg u, consinco.map_produto a, consinco.map_famdivisao d, - consinco.map_famembalagem k, consinco.mad_segmento seg1, consinco.mrl_produtoempresa c, - consinco.mad_famsegmento h, consinco.max_empresa e, consinco.mrl_custodia y, consinco.mrl_custodia z, - consinco.mrlv_descontoregra re, consinco.max_divisao dv, consinco.max_paramgeral pg - WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final - AND z.nroempresa = p_empresa - AND e.nroempresa = z.nroempresa - AND e.nrodivisao = d.nrodivisao - AND z.seqproduto = c.seqproduto - AND e.nroempresa = c.nroempresa - AND y.seqproduto = z.seqproduto - AND y.dtaentradasaida = z.dtaentradasaida - AND y.nroempresa = z.nroempresa - AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) - AND seg1.nrodivisao = d.nrodivisao - AND h.seqfamilia = z.seqfamilia - AND h.nrosegmento = e.nrosegmentoprinc - AND h.nrosegmento = seg1.nrosegmento - AND d.seqfamilia = z.seqfamilia - AND d.nrodivisao IN (1) - AND dv.nrodivisao = d.nrodivisao - AND k.seqfamilia = h.seqfamilia - AND k.qtdembalagem = 1 - AND z.seqproduto = re.seqproduto(+) - AND z.dtaentradasaida = re.datafaturamento(+) - AND z.nroempresa = re.nroempresa(+) - AND g.nrodivisao = u.nrodivisao - AND g.nivelhierarquia = 1 - AND g.tipcategoria = 'M' - AND g.statuscategor != 'I' - AND u.seqfamilia = d.seqfamilia - AND u.nrodivisao = d.nrodivisao - AND u.seqcategoria = g.seqcategoria - AND u.status = 'A' - AND a.seqproduto = z.seqproduto - AND a.seqfamilia = d.seqfamilia - GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido, - a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, - a.propqtdprodutobase, e.nrodivisao, a.seqfamilia - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); - - IF r.codcatn1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.codcatn2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.codcatn3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.codcatn4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.codcatn5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); - - INSERT INTO TB_FLASH_FATO_VENDA ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda, - vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_VENDA.NEXTVAL, - r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, - v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, - r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, - r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_VENDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql b/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql deleted file mode 100644 index 9c854d9..0000000 --- a/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql +++ /dev/null @@ -1,119 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO ( - p_data_inicial IN DATE, - p_data_final IN DATE -) AS -BEGIN - DELETE FROM TB_FLASH_NODO_RESUMO_CONTRIBUICAO - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; - - INSERT INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( - id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, - nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, - vlr_contribuicao, vl_ticket_medio, - valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, - percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, - desvio, percentual_atingimento, data_apuracao - ) - WITH datas AS ( - SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia - FROM dual - CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final) - ), - contribuicao_direta AS ( - SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, - f.ano_referencia, f.mes_referencia, f.dia_referencia, - SUM(f.nro_tickets) AS nro_tickets, - SUM(f.vlr_imp_contribuicao) AS vlr_imp_contribuicao, - SUM(f.qtde_contribuicao) AS qtde_contribuicao, - SUM(f.vlr_contribuicao) AS vlr_contribuicao - FROM TB_FLASH_FATO_CONTRIBUICAO f - WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia - ), - contribuicao_hierarquia AS ( - SELECT a.id_nodo_ancestral AS id_nodo, - d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, - SUM(NVL(cd.nro_tickets, 0)) AS nro_tickets, - SUM(NVL(cd.vlr_imp_contribuicao, 0)) AS vlr_imp_contribuicao, - SUM(NVL(cd.qtde_contribuicao, 0)) AS qtde_contribuicao, - SUM(NVL(cd.vlr_contribuicao, 0)) AS vlr_contribuicao - FROM ( - SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, - n.id_nodo AS id_nodo_descendente - FROM TB_FLASH_NODO n - CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai - ) a - CROSS JOIN datas d - LEFT JOIN contribuicao_direta cd - ON cd.id_nodo = a.id_nodo_descendente - AND cd.data_referencia = d.data_referencia - GROUP BY a.id_nodo_ancestral, d.data_referencia - ), - meta_propria_diaria AS ( - SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, - MAX(m.percentual_meta) AS percentual_meta_propria, - SUM(m.valor_meta) AS valor_meta_propria - FROM TB_FLASH_META_CONTRIBUICAO m - WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia - ), - meta_filhos_diaria AS ( - SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, - SUM(mpd.valor_meta_propria) AS valor_meta_filhos - FROM TB_FLASH_NODO pai - JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo - JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo - GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia - ), - base AS ( - SELECT n.id_nodo, d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia - FROM TB_FLASH_NODO n - CROSS JOIN datas d - ) - SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL, - b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, - ch.nro_tickets, - ch.vlr_imp_contribuicao, - ch.qtde_contribuicao, - ch.vlr_contribuicao, - CASE WHEN NVL(ch.nro_tickets, 0) > 0 THEN ch.vlr_contribuicao / ch.nro_tickets ELSE NULL END, - mpd.valor_meta_propria, - mfd.valor_meta_filhos, - CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, - mpd.percentual_meta_propria, - CAST(NULL AS NUMBER(10,4)), - CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, - NVL(ch.vlr_contribuicao, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), - CASE - WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL - ELSE (NVL(ch.vlr_contribuicao, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 - END, - SYSDATE - FROM base b - LEFT JOIN contribuicao_hierarquia ch ON ch.id_nodo = b.id_nodo AND ch.data_referencia = b.data_referencia - LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia - LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO' AND object_type = 'PROCEDURE'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql b/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql deleted file mode 100644 index 942ceba..0000000 --- a/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql +++ /dev/null @@ -1,444 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_CONTRIBUICAO - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT Z.DTA, - Z.NROEMPRESA, - Z.NOMEEMPRESA, - Z.NROSEGMENTO, - Z.NRODIVISAO, - Z.SEQPRODUTO, - Z.SEQPRODUTOBASE, - Z.PRODUTO, - Z.SEQCATEGORIAN1, - Z.CATEGORIAN1, - Z.SEQCATEGORIAN2, - Z.CATEGORIAN2, - Z.SEQCATEGORIAN3, - Z.CATEGORIAN3, - Z.SEQCATEGORIAN4, - Z.CATEGORIAN4, - Z.SEQCATEGORIAN5, - Z.CATEGORIAN5, - Z.VLRVENDA, - (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) - OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN - Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - - CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) - FROM MRL_CUSTODIA CD - WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) - AND CD.NROEMPRESA = 301 - AND CD.DTAENTRADASAIDA = ( - SELECT MAX(CD1.DTAENTRADASAIDA) - FROM MRL_CUSTODIA CD1 - WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO - AND CD1.NROEMPRESA = 301 - AND CD1.DTAENTRADASAIDA <= Z.DTA - ) - )) - Z.VLR_IMP_VENDA - ELSE - Z.VLRCONTRIB - END) AS VLRCONTRIB, - Z.VLRVENDA_MES_ANT, - Z.VLRCONTRIB_MES_ANT, - Z.VLRVENDA_ANO_ANT, - Z.VLRCONTRIB_ANO_ANT, - Z.QTDE_VENDA, - Z.VLR_IMP_VENDA, - Z.PROPQTDPRODUTOBASE - FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ - TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, - V.NROEMPRESA, - E.FANTASIA AS NOMEEMPRESA, - V.NROSEGMENTO, - V.NRODIVISAO, - V.SEQPRODUTO, - A.SEQPRODUTOBASE, - A.DESCCOMPLETA PRODUTO, - CC1.SEQCATEGORIA AS SEQCATEGORIAN1, - CC1.CATEGORIA AS CATEGORIAN1, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS SEQCATEGORIAN2, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS CATEGORIAN2, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN3, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN3, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN4, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN4, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN5, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN5, - SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, - SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, - SUM( DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) - ) - - DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) - ) - + DECODE( - V.ACMCOMPRAVENDA, 'I', 0, - DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - - DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM - ) - ) AS VLR_IMP_VENDA - , sum( - consinco.fC5_AbcDistribLucratividade( - 'L', - 'L', - 'N', - V.VLRITEM , - 'N', - V.VLRICMSST, - V.VLRFCPST, - V.VLRICMSSTEMPORIG, - E.UF, - V.UFPESSOA, - 'S', - null, - 'N', - V.VLRIPIITEM, - V.VLRIPIDEVOLITEM, - 'N', - V.VLRDESCFORANF, - Y.CMDIAVLRNF - 0 , - Y.CMDIAIPI, - nvl( Y.CMDIACREDPIS, 0 ), - nvl( Y.CMDIACREDCOFINS, 0 ), - Y.CMDIAICMSST, - Y.CMDIADESPNF, - Y.CMDIADESPFORANF, - Y.CMDIADCTOFORANF, - 'S', - a.propqtdprodutobase, - V.QTDITEM, - V.VLREMBDESCRESSARCST, - V.ACMCOMPRAVENDA, - V.PISITEM, - V.COFINSITEM, - decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), - ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), - nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), - Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , - 'N', - V.VLRDESPOPERACIONALITEM, - Y.VLRDESPESAVDA, - 'N', - nvl( Y.VLRVERBAVDAACR, 0 ), - DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), - Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), - 'N', - NVL(V.VLRTOTCOMISSAOITEM, 0), - V.VLRDEVOLITEM, - VLRDEVOLICMSST, - V.DVLRFCPST, - V.QTDDEVOLITEM, - V.PISDEVOLITEM, - V.COFINSDEVOLITEM, - V.VLRDESPOPERACIONALITEMDEVOL, - V.VLRTOTCOMISSAOITEMDEVOL, - E.PERIRLUCRAT, - E.PERCSLLLUCRAT, - Y.CMDIACREDICMS, - decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + 0 , - V.VLRFCPICMS, - V.PERCPMF, - V.PEROUTROIMPOSTO, - decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - + 0 , - V.DVLRFCPICMS, - case when ( 'N' ) = 'N' then - (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + - nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) - else 0 - end, - case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then - coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) - else 1 - end, - 'N', - 0, - 0, - 'S', - V.VLRDESCMEDALHA, - 'S', - V.VLRDESCFORNEC, - V.VLRDESCFORNECDEVOL, - 'N', - V.VLRFRETEITEMRATEIO, - V.VLRFRETEITEMRATEIODEV, - 'S', - V.VLRICMSSTEMBUTPROD, - V.VLRICMSSTEMBUTPRODDEV, - V.VLREMBDESCRESSARCSTDEVOL, - case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, - nvl( Y.CMDIACREDIPI, 0 ), - NVL(V.VLRITEMRATEIOCTE,0), - 'N', - 'C', - V.VLRIPIPRECOVDA, - V.VLRIPIPRECODEVOL, - V.VLRDESCMEDALHADEVOL, - 'N' - )) AS VLRCONTRIB - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT - , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE - FROM consinco.MRL_CUSTODIA Y - JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA - JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO - JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO - JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO - JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 - JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) - JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO - JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA - JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' - LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA - WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) - AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) - AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) - AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final - GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) - , V.NROEMPRESA - , E.FANTASIA - , V.NRODIVISAO - , V.NROSEGMENTO - , V.SEQPRODUTO - , A.SEQPRODUTOBASE - , A.SEQFAMILIA - , A.DESCCOMPLETA - , CC1.SEQCATEGORIA - , CC1.CATEGORIA) Z - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); - - IF r.SEQCATEGORIAN1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.SEQCATEGORIAN2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.SEQCATEGORIAN3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.SEQCATEGORIAN4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.SEQCATEGORIAN5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); - - INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, - vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, - r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), - TO_NUMBER(TO_CHAR(r.DTA, 'D')), - v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, - r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, - r.QTDE_VENDA, r.VLRCONTRIB, - CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, - r.PROPQTDPRODUTOBASE, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql b/migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql deleted file mode 100644 index 7ba0085..0000000 --- a/migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql +++ /dev/null @@ -1,866 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_CONTRIBUICAO - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT Z.DTA, - Z.NROEMPRESA, - Z.NOMEEMPRESA, - Z.NROSEGMENTO, - Z.NRODIVISAO, - Z.SEQPRODUTO, - Z.SEQPRODUTOBASE, - Z.PRODUTO, - Z.SEQCATEGORIAN1, - Z.CATEGORIAN1, - Z.SEQCATEGORIAN2, - Z.CATEGORIAN2, - Z.SEQCATEGORIAN3, - Z.CATEGORIAN3, - Z.SEQCATEGORIAN4, - Z.CATEGORIAN4, - Z.SEQCATEGORIAN5, - Z.CATEGORIAN5, - Z.VLRVENDA, - (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) - OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN - Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - - CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) - FROM MRL_CUSTODIA CD - WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) - AND CD.NROEMPRESA = 301 - AND CD.DTAENTRADASAIDA = ( - SELECT MAX(CD1.DTAENTRADASAIDA) - FROM MRL_CUSTODIA CD1 - WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO - AND CD1.NROEMPRESA = 301 - AND CD1.DTAENTRADASAIDA <= Z.DTA - ) - )) - Z.VLR_IMP_VENDA - ELSE - Z.VLRCONTRIB - END) AS VLRCONTRIB, - Z.VLRVENDA_MES_ANT, - Z.VLRCONTRIB_MES_ANT, - Z.VLRVENDA_ANO_ANT, - Z.VLRCONTRIB_ANO_ANT, - Z.QTDE_VENDA, - Z.VLR_IMP_VENDA, - Z.PROPQTDPRODUTOBASE - FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ - TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, - V.NROEMPRESA, - E.FANTASIA AS NOMEEMPRESA, - V.NROSEGMENTO, - V.NRODIVISAO, - V.SEQPRODUTO, - A.SEQPRODUTOBASE, - A.DESCCOMPLETA PRODUTO, - CC1.SEQCATEGORIA AS SEQCATEGORIAN1, - CC1.CATEGORIA AS CATEGORIAN1, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS SEQCATEGORIAN2, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS CATEGORIAN2, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN3, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN3, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN4, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN4, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN5, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN5, - SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, - SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, - SUM( DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) - ) - - DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) - ) - + DECODE( - V.ACMCOMPRAVENDA, 'I', 0, - DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - - DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM - ) - ) AS VLR_IMP_VENDA - , sum( - consinco.fC5_AbcDistribLucratividade( - 'L', - 'L', - 'N', - V.VLRITEM , - 'N', - V.VLRICMSST, - V.VLRFCPST, - V.VLRICMSSTEMPORIG, - E.UF, - V.UFPESSOA, - 'S', - null, - 'N', - V.VLRIPIITEM, - V.VLRIPIDEVOLITEM, - 'N', - V.VLRDESCFORANF, - Y.CMDIAVLRNF - 0 , - Y.CMDIAIPI, - nvl( Y.CMDIACREDPIS, 0 ), - nvl( Y.CMDIACREDCOFINS, 0 ), - Y.CMDIAICMSST, - Y.CMDIADESPNF, - Y.CMDIADESPFORANF, - Y.CMDIADCTOFORANF, - 'S', - a.propqtdprodutobase, - V.QTDITEM, - V.VLREMBDESCRESSARCST, - V.ACMCOMPRAVENDA, - V.PISITEM, - V.COFINSITEM, - decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), - ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), - nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), - Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , - 'N', - V.VLRDESPOPERACIONALITEM, - Y.VLRDESPESAVDA, - 'N', - nvl( Y.VLRVERBAVDAACR, 0 ), - DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), - Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), - 'N', - NVL(V.VLRTOTCOMISSAOITEM, 0), - V.VLRDEVOLITEM, - VLRDEVOLICMSST, - V.DVLRFCPST, - V.QTDDEVOLITEM, - V.PISDEVOLITEM, - V.COFINSDEVOLITEM, - V.VLRDESPOPERACIONALITEMDEVOL, - V.VLRTOTCOMISSAOITEMDEVOL, - E.PERIRLUCRAT, - E.PERCSLLLUCRAT, - Y.CMDIACREDICMS, - decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + 0 , - V.VLRFCPICMS, - V.PERCPMF, - V.PEROUTROIMPOSTO, - decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - + 0 , - V.DVLRFCPICMS, - case when ( 'N' ) = 'N' then - (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + - nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) - else 0 - end, - case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then - coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) - else 1 - end, - 'N', - 0, - 0, - 'S', - V.VLRDESCMEDALHA, - 'S', - V.VLRDESCFORNEC, - V.VLRDESCFORNECDEVOL, - 'N', - V.VLRFRETEITEMRATEIO, - V.VLRFRETEITEMRATEIODEV, - 'S', - V.VLRICMSSTEMBUTPROD, - V.VLRICMSSTEMBUTPRODDEV, - V.VLREMBDESCRESSARCSTDEVOL, - case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, - nvl( Y.CMDIACREDIPI, 0 ), - NVL(V.VLRITEMRATEIOCTE,0), - 'N', - 'C', - V.VLRIPIPRECOVDA, - V.VLRIPIPRECODEVOL, - V.VLRDESCMEDALHADEVOL, - 'N' - )) AS VLRCONTRIB - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT - , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE - FROM consinco.MRL_CUSTODIA Y - JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA - JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO - JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO - JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO - JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 - JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) - JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO - JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA - JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' - LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA - WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) - AND V.NROEMPRESA = p_empresa - AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) - AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) - AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final - GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) - , V.NROEMPRESA - , E.FANTASIA - , V.NRODIVISAO - , V.NROSEGMENTO - , V.SEQPRODUTO - , A.SEQPRODUTOBASE - , A.SEQFAMILIA - , A.DESCCOMPLETA - , CC1.SEQCATEGORIA - , CC1.CATEGORIA) Z - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); - - IF r.SEQCATEGORIAN1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.SEQCATEGORIAN2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.SEQCATEGORIAN3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.SEQCATEGORIAN4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.SEQCATEGORIAN5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); - - INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, - vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, - r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), - TO_NUMBER(TO_CHAR(r.DTA, 'D')), - v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, - r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, - r.QTDE_VENDA, r.VLRCONTRIB, - CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, - r.PROPQTDPRODUTOBASE, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_CONTRIBUICAO - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT Z.DTA, - Z.NROEMPRESA, - Z.NOMEEMPRESA, - Z.NROSEGMENTO, - Z.NRODIVISAO, - Z.SEQPRODUTO, - Z.SEQPRODUTOBASE, - Z.PRODUTO, - Z.SEQCATEGORIAN1, - Z.CATEGORIAN1, - Z.SEQCATEGORIAN2, - Z.CATEGORIAN2, - Z.SEQCATEGORIAN3, - Z.CATEGORIAN3, - Z.SEQCATEGORIAN4, - Z.CATEGORIAN4, - Z.SEQCATEGORIAN5, - Z.CATEGORIAN5, - Z.VLRVENDA, - (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) - OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN - Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - - CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) - FROM MRL_CUSTODIA CD - WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) - AND CD.NROEMPRESA = 301 - AND CD.DTAENTRADASAIDA = ( - SELECT MAX(CD1.DTAENTRADASAIDA) - FROM MRL_CUSTODIA CD1 - WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO - AND CD1.NROEMPRESA = 301 - AND CD1.DTAENTRADASAIDA <= Z.DTA - ) - )) - Z.VLR_IMP_VENDA - ELSE - Z.VLRCONTRIB - END) AS VLRCONTRIB, - Z.VLRVENDA_MES_ANT, - Z.VLRCONTRIB_MES_ANT, - Z.VLRVENDA_ANO_ANT, - Z.VLRCONTRIB_ANO_ANT, - Z.QTDE_VENDA, - Z.VLR_IMP_VENDA, - Z.PROPQTDPRODUTOBASE - FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ - TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, - V.NROEMPRESA, - E.FANTASIA AS NOMEEMPRESA, - V.NROSEGMENTO, - V.NRODIVISAO, - V.SEQPRODUTO, - A.SEQPRODUTOBASE, - A.DESCCOMPLETA PRODUTO, - CC1.SEQCATEGORIA AS SEQCATEGORIAN1, - CC1.CATEGORIA AS CATEGORIAN1, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS SEQCATEGORIAN2, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS CATEGORIAN2, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN3, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN3, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN4, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN4, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN5, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN5, - SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, - SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, - SUM( DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) - ) - - DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) - ) - + DECODE( - V.ACMCOMPRAVENDA, 'I', 0, - DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - - DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM - ) - ) AS VLR_IMP_VENDA - , sum( - consinco.fC5_AbcDistribLucratividade( - 'L', - 'L', - 'N', - V.VLRITEM , - 'N', - V.VLRICMSST, - V.VLRFCPST, - V.VLRICMSSTEMPORIG, - E.UF, - V.UFPESSOA, - 'S', - null, - 'N', - V.VLRIPIITEM, - V.VLRIPIDEVOLITEM, - 'N', - V.VLRDESCFORANF, - Y.CMDIAVLRNF - 0 , - Y.CMDIAIPI, - nvl( Y.CMDIACREDPIS, 0 ), - nvl( Y.CMDIACREDCOFINS, 0 ), - Y.CMDIAICMSST, - Y.CMDIADESPNF, - Y.CMDIADESPFORANF, - Y.CMDIADCTOFORANF, - 'S', - a.propqtdprodutobase, - V.QTDITEM, - V.VLREMBDESCRESSARCST, - V.ACMCOMPRAVENDA, - V.PISITEM, - V.COFINSITEM, - decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), - ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), - nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), - Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , - 'N', - V.VLRDESPOPERACIONALITEM, - Y.VLRDESPESAVDA, - 'N', - nvl( Y.VLRVERBAVDAACR, 0 ), - DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), - Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), - 'N', - NVL(V.VLRTOTCOMISSAOITEM, 0), - V.VLRDEVOLITEM, - VLRDEVOLICMSST, - V.DVLRFCPST, - V.QTDDEVOLITEM, - V.PISDEVOLITEM, - V.COFINSDEVOLITEM, - V.VLRDESPOPERACIONALITEMDEVOL, - V.VLRTOTCOMISSAOITEMDEVOL, - E.PERIRLUCRAT, - E.PERCSLLLUCRAT, - Y.CMDIACREDICMS, - decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + 0 , - V.VLRFCPICMS, - V.PERCPMF, - V.PEROUTROIMPOSTO, - decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - + 0 , - V.DVLRFCPICMS, - case when ( 'N' ) = 'N' then - (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + - nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) - else 0 - end, - case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then - coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) - else 1 - end, - 'N', - 0, - 0, - 'S', - V.VLRDESCMEDALHA, - 'S', - V.VLRDESCFORNEC, - V.VLRDESCFORNECDEVOL, - 'N', - V.VLRFRETEITEMRATEIO, - V.VLRFRETEITEMRATEIODEV, - 'S', - V.VLRICMSSTEMBUTPROD, - V.VLRICMSSTEMBUTPRODDEV, - V.VLREMBDESCRESSARCSTDEVOL, - case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, - nvl( Y.CMDIACREDIPI, 0 ), - NVL(V.VLRITEMRATEIOCTE,0), - 'N', - 'C', - V.VLRIPIPRECOVDA, - V.VLRIPIPRECODEVOL, - V.VLRDESCMEDALHADEVOL, - 'N' - )) AS VLRCONTRIB - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT - , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE - FROM consinco.MRL_CUSTODIA Y - JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA - JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO - JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO - JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO - JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 - JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) - JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO - JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA - JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' - LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA - WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) - AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) - AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) - AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final - GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) - , V.NROEMPRESA - , E.FANTASIA - , V.NRODIVISAO - , V.NROSEGMENTO - , V.SEQPRODUTO - , A.SEQPRODUTOBASE - , A.SEQFAMILIA - , A.DESCCOMPLETA - , CC1.SEQCATEGORIA - , CC1.CATEGORIA) Z - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); - - IF r.SEQCATEGORIAN1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.SEQCATEGORIAN2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.SEQCATEGORIAN3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.SEQCATEGORIAN4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.SEQCATEGORIAN5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); - - INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, - vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, - r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), - TO_NUMBER(TO_CHAR(r.DTA, 'D')), - v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, - r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, - r.QTDE_VENDA, r.VLRCONTRIB, - CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, - r.PROPQTDPRODUTOBASE, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql b/migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql deleted file mode 100644 index 0270177..0000000 --- a/migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql +++ /dev/null @@ -1,415 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_CONTRIBUICAO - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT Z.DTA, - Z.NROEMPRESA, - Z.NOMEEMPRESA, - Z.NROSEGMENTO, - Z.NRODIVISAO, - Z.SEQPRODUTO, - Z.SEQPRODUTOBASE, - Z.PRODUTO, - Z.SEQCATEGORIAN1, - Z.CATEGORIAN1, - Z.SEQCATEGORIAN2, - Z.CATEGORIAN2, - Z.SEQCATEGORIAN3, - Z.CATEGORIAN3, - Z.SEQCATEGORIAN4, - Z.CATEGORIAN4, - Z.SEQCATEGORIAN5, - Z.CATEGORIAN5, - Z.VLRVENDA, - Z.VLRCONTRIB, - Z.VLRVENDA_MES_ANT, - Z.VLRCONTRIB_MES_ANT, - Z.VLRVENDA_ANO_ANT, - Z.VLRCONTRIB_ANO_ANT, - Z.QTDE_VENDA, - Z.VLR_IMP_VENDA, - Z.PROPQTDPRODUTOBASE - FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ - TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, - V.NROEMPRESA, - E.NOMEREDUZIDO AS NOMEEMPRESA, - V.NROSEGMENTO, - V.NRODIVISAO, - V.SEQPRODUTO, - A.SEQPRODUTOBASE, - A.DESCCOMPLETA PRODUTO, - CC1.SEQCATEGORIA AS SEQCATEGORIAN1, - CC1.CATEGORIA AS CATEGORIAN1, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS SEQCATEGORIAN2, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR in ('A', 'F') - AND CC2.NIVELHIERARQUIA = 2 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS in ('A', 'F') - ) AS CATEGORIAN2, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN3, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 3 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN3, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN4, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 4 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN4, - ( SELECT CC2.SEQCATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS SEQCATEGORIAN5, - ( SELECT CC2.CATEGORIA - FROM consinco.MAP_FAMDIVCATEG DC2 - JOIN consinco.MAP_CATEGORIA CC2 - ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA - AND CC2.STATUSCATEGOR = 'A' - AND CC2.NIVELHIERARQUIA = 5 - AND CC2.NRODIVISAO = DC2.NRODIVISAO - AND CC2.TIPCATEGORIA = 'M' - WHERE DC2.SEQFAMILIA = A.SEQFAMILIA - AND DC2.NRODIVISAO = V.NRODIVISAO - AND DC2.STATUS = 'A' - ) AS CATEGORIAN5, - SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, - SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, - SUM( DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) - ) - - DECODE( - V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), - DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) - ) - + DECODE( - V.ACMCOMPRAVENDA, 'I', 0, - DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - - DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM - ) - ) AS VLR_IMP_VENDA - , sum( - consinco.fC5_AbcDistribLucratividade( - 'L', - 'L', - 'N', - V.VLRITEM , - 'N', - V.VLRICMSST, - V.VLRFCPST, - V.VLRICMSSTEMPORIG, - E.UF, - V.UFPESSOA, - 'S', - null, - 'N', - V.VLRIPIITEM, - V.VLRIPIDEVOLITEM, - 'N', - V.VLRDESCFORANF, - Y.CMDIAVLRNF - 0 , - Y.CMDIAIPI, - nvl( Y.CMDIACREDPIS, 0 ), - nvl( Y.CMDIACREDCOFINS, 0 ), - Y.CMDIAICMSST, - Y.CMDIADESPNF, - Y.CMDIADESPFORANF, - Y.CMDIADCTOFORANF, - 'S', - a.propqtdprodutobase, - V.QTDITEM, - V.VLREMBDESCRESSARCST, - V.ACMCOMPRAVENDA, - V.PISITEM, - V.COFINSITEM, - decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), - ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), - nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), - Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , - 'N', - V.VLRDESPOPERACIONALITEM, - Y.VLRDESPESAVDA, - 'N', - nvl( Y.VLRVERBAVDAACR, 0 ), - DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), - Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), - 'N', - NVL(V.VLRTOTCOMISSAOITEM, 0), - V.VLRDEVOLITEM, - VLRDEVOLICMSST, - V.DVLRFCPST, - V.QTDDEVOLITEM, - V.PISDEVOLITEM, - V.COFINSDEVOLITEM, - V.VLRDESPOPERACIONALITEMDEVOL, - V.VLRTOTCOMISSAOITEMDEVOL, - E.PERIRLUCRAT, - E.PERCSLLLUCRAT, - Y.CMDIACREDICMS, - decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) - + 0 , - V.VLRFCPICMS, - V.PERCPMF, - V.PEROUTROIMPOSTO, - decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) - + 0 , - V.DVLRFCPICMS, - case when ( 'N' ) = 'N' then - (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + - nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) - else 0 - end, - case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then - coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) - else 1 - end, - 'N', - 0, - 0, - 'S', - V.VLRDESCMEDALHA, - 'S', - V.VLRDESCFORNEC, - V.VLRDESCFORNECDEVOL, - 'N', - V.VLRFRETEITEMRATEIO, - V.VLRFRETEITEMRATEIODEV, - 'S', - V.VLRICMSSTEMBUTPROD, - V.VLRICMSSTEMBUTPRODDEV, - V.VLREMBDESCRESSARCSTDEVOL, - case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, - nvl( Y.CMDIACREDIPI, 0 ), - NVL(V.VLRITEMRATEIOCTE,0), - 'N', - 'C', - V.VLRIPIPRECOVDA, - V.VLRIPIPRECODEVOL, - V.VLRDESCMEDALHADEVOL, - 'N' - )) AS VLRCONTRIB - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT - , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE - FROM consinco.MRL_CUSTODIA Y - JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA - JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO - JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO - JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO - JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 - JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) - JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO - JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA - JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' - LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA - WHERE V.NROEMPRESA = p_empresa - AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) - AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) - AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final - GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) - , V.NROEMPRESA - , E.NOMEREDUZIDO - , V.NRODIVISAO - , V.NROSEGMENTO - , V.SEQPRODUTO - , A.SEQPRODUTOBASE - , A.SEQFAMILIA - , A.DESCCOMPLETA - , CC1.SEQCATEGORIA - , CC1.CATEGORIA) Z - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); - - IF r.SEQCATEGORIAN1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.SEQCATEGORIAN2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.SEQCATEGORIAN3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.SEQCATEGORIAN4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.SEQCATEGORIAN5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); - - INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, - vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, - r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), - TO_NUMBER(TO_CHAR(r.DTA, 'D')), - v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, - r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, - r.QTDE_VENDA, r.VLRCONTRIB, - CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, - r.PROPQTDPRODUTOBASE, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql b/migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql deleted file mode 100644 index 21026b0..0000000 --- a/migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql +++ /dev/null @@ -1,107 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA ( - p_data_inicial IN DATE, - p_data_final IN DATE -) AS -BEGIN - DELETE FROM TB_FLASH_NODO_RESUMO_PERDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; - - INSERT INTO TB_FLASH_NODO_RESUMO_PERDA ( - id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, - valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, - percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, - desvio, percentual_atingimento, data_apuracao - ) - WITH datas AS ( - SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia - FROM dual - CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final) - ), - perda_direta AS ( - SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, - f.ano_referencia, f.mes_referencia, f.dia_referencia, - SUM(f.vlr_perda) AS valor_perda - FROM TB_FLASH_FATO_PERDA f - WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia - ), - perda_hierarquia AS ( - SELECT a.id_nodo_ancestral AS id_nodo, - d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, - SUM(NVL(pd.valor_perda, 0)) AS valor_perda - FROM ( - SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, - n.id_nodo AS id_nodo_descendente - FROM TB_FLASH_NODO n - CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai - ) a - CROSS JOIN datas d - LEFT JOIN perda_direta pd - ON pd.id_nodo = a.id_nodo_descendente - AND pd.data_referencia = d.data_referencia - GROUP BY a.id_nodo_ancestral, d.data_referencia - ), - meta_propria_diaria AS ( - SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, - MAX(m.percentual_meta) AS percentual_meta_propria, - SUM(m.valor_meta) AS valor_meta_propria - FROM TB_FLASH_META_PERDA m - WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia - ), - meta_filhos_diaria AS ( - SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, - SUM(mpd.valor_meta_propria) AS valor_meta_filhos - FROM TB_FLASH_NODO pai - JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo - JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo - GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia - ), - base AS ( - SELECT n.id_nodo, d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia - FROM TB_FLASH_NODO n - CROSS JOIN datas d - ) - SELECT SEQ_TB_FLASH_NODO_RESUMO_PERDA.NEXTVAL, - b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, - ph.valor_perda, - mpd.valor_meta_propria, - mfd.valor_meta_filhos, - CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, - mpd.percentual_meta_propria, - CAST(NULL AS NUMBER(10,4)), - CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, - NVL(ph.valor_perda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), - CASE - WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL - ELSE (NVL(ph.valor_perda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 - END, - SYSDATE - FROM base b - LEFT JOIN perda_hierarquia ph ON ph.id_nodo = b.id_nodo AND ph.data_referencia = b.data_referencia - LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia - LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_PERDA' AND object_type = 'PROCEDURE'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql b/migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql deleted file mode 100644 index 983cbfb..0000000 --- a/migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql +++ /dev/null @@ -1,186 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_PERDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT - e.nroempresa AS empresa, - e.nomereduzido AS nomeempresa, - a.seqproduto AS cod_produto, - a.seqprodutobase, - a.desccompleta AS descricao, - d.nrodivisao, - seg1.nrosegmento, - p.dtamovimento AS data_referencia, - TO_NUMBER(TO_CHAR(p.dtamovimento, 'DD')) AS dia, - TO_NUMBER(TO_CHAR(p.dtamovimento, 'MM')) AS mes, - TO_NUMBER(TO_CHAR(p.dtamovimento, 'YYYY')) AS ano, - TO_NUMBER(TO_CHAR(p.dtamovimento, 'D')) AS dia_semana, - SUM(p.qtdperda) AS qtde_perda, - SUM(p.vlrperda) AS vlr_perda, - SUM(p.vlrcustoperda) AS vlr_custo_perda, - a.propqtdprodutobase, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5 - FROM max_empresa e - JOIN mar_perda p - ON p.nroempresa = e.nroempresa - JOIN map_produto a - ON a.seqproduto = p.seqproduto - JOIN map_famdivisao d - ON d.seqfamilia = a.seqfamilia - AND d.nrodivisao = e.nrodivisao - JOIN mad_famsegmento h - ON h.seqfamilia = a.seqfamilia - AND h.nrosegmento = e.nrosegmentoprinc - JOIN mad_segmento seg1 - ON seg1.nrosegmento = h.nrosegmento - AND seg1.nrodivisao = d.nrodivisao - WHERE p.dtamovimento BETWEEN p_data_inicial AND p_data_final - AND p.nroempresa = p_empresa - GROUP BY e.nroempresa, e.nomereduzido, a.seqproduto, a.seqprodutobase, - a.desccompleta, d.nrodivisao, seg1.nrosegmento, p.dtamovimento, - a.propqtdprodutobase, a.seqfamilia, e.nrodivisao - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); - - IF r.codcatn1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.codcatn2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.codcatn3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.codcatn4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.codcatn5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); - - INSERT INTO TB_FLASH_FATO_PERDA ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, vlr_custo_perda, qtde_perda, - vlr_perda, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_PERDA.NEXTVAL, - r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, - v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, - r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.vlr_custo_perda, - r.qtde_perda, r.vlr_perda, r.propqtdprodutobase, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260522000001_tb_flash_fato_venda_add_nome_segmento.sql b/migrations/C5/20260522000001_tb_flash_fato_venda_add_nome_segmento.sql deleted file mode 100644 index b2142ef..0000000 --- a/migrations/C5/20260522000001_tb_flash_fato_venda_add_nome_segmento.sql +++ /dev/null @@ -1,24 +0,0 @@ --- +goose Up --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_FATO_VENDA' AND column_name = 'NOME_SEGMENTO'; - IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD (NOME_SEGMENTO VARCHAR2(300))'; - EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_FATO_VENDA.NOME_SEGMENTO IS ''Nome do segmento'''; - END IF; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_FATO_VENDA' AND column_name = 'NOME_SEGMENTO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA DROP COLUMN NOME_SEGMENTO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql b/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql deleted file mode 100644 index d8bc2bb..0000000 --- a/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql +++ /dev/null @@ -1,499 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER, - p_divisao IN VARCHAR2 DEFAULT NULL, - p_cgos IN VARCHAR2 DEFAULT NULL -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_VENDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - WITH pg AS ( - SELECT MAX(indutilicmstaresugprabc) AS indutilicmstaresugprabc - FROM consinco.max_paramgeral - ), - cat AS ( - SELECT dc.nrodivisao, - dc.seqfamilia, - MAX(CASE WHEN cc.nivelhierarquia = 1 THEN dc.seqcategoria END) AS codcatn1, - MAX(CASE WHEN cc.nivelhierarquia = 1 THEN cc.categoria END) AS nomecatn1, - MAX(CASE WHEN cc.nivelhierarquia = 2 THEN dc.seqcategoria END) AS codcatn2, - MAX(CASE WHEN cc.nivelhierarquia = 2 THEN cc.categoria END) AS nomecatn2, - MAX(CASE WHEN cc.nivelhierarquia = 3 THEN dc.seqcategoria END) AS codcatn3, - MAX(CASE WHEN cc.nivelhierarquia = 3 THEN cc.categoria END) AS nomecatn3, - MAX(CASE WHEN cc.nivelhierarquia = 4 THEN dc.seqcategoria END) AS codcatn4, - MAX(CASE WHEN cc.nivelhierarquia = 4 THEN cc.categoria END) AS nomecatn4, - MAX(CASE WHEN cc.nivelhierarquia = 5 THEN dc.seqcategoria END) AS codcatn5, - MAX(CASE WHEN cc.nivelhierarquia = 5 THEN cc.categoria END) AS nomecatn5 - FROM consinco.map_famdivcateg dc - JOIN consinco.map_categoria cc - ON cc.seqcategoria = dc.seqcategoria - AND cc.nrodivisao = dc.nrodivisao - AND cc.statuscategor = 'A' - AND cc.tipcategoria = 'M' - AND cc.nivelhierarquia BETWEEN 1 AND 5 - WHERE dc.status = 'A' - GROUP BY dc.nrodivisao, dc.seqfamilia - ) - SELECT dv.nrodivisao, - seg1.nrosegmento, - seg1.descsegmento, - e.nroempresa AS empresa, - e.nomereduzido AS nomeempresa, - a.seqproduto AS cod_produto, - a.seqprodutobase, - a.desccompleta AS descricao, - z.dtaentradasaida AS data_referencia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'D')) AS dia_semana, - TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'DD')) AS dia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'MM')) AS mes, - TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'YYYY')) AS ano, - 0 AS nro_tickets, - SUM( - DECODE(y.qtdvda, 0, 0, - ( - y.vlrimpostovda - + NVL( - DECODE(pg.indutilicmstaresugprabc, - 'S', COALESCE(y.vlricmsvdasolicit, y.vlricmsvda), - y.vlricmsvda - ), 0 - ) - + NVL(y.vlrpisvda, 0) - + NVL(y.vlrcofinsvda, 0) - ) / y.qtdvda - ) * z.qtdvda - ) - + - SUM( - DECODE(NVL(y.qtddevol, 0), 0, 0, - ( - NVL(y.vlrimpostodevol, 0) - + NVL( - DECODE(pg.indutilicmstaresugprabc, - 'S', - DECODE(y.qtdvda, 0, 0, - COALESCE( - (y.vlricmsvdasolicit / y.qtdvda) * y.qtddevol, - y.vlricmsdevol - ) - ), - ((z.vlricmsvda / GREATEST(z.qtdvda, 1)) * NVL(z.qtddevol, 0)) - ), 0 - ) - + NVL(y.vlrpisdevol, 0) - + NVL(y.vlrcofinsdevol, 0) - ) / y.qtddevol - ) * (0 - NVL(z.qtddevol, 0)) - ) AS vlr_imp_venda, - SUM((z.qtdvda - NVL(z.qtddevol, 0)) / k.qtdembalagem) AS qtde_venda, - SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0)) AS vlr_venda, - 0 AS vl_ticket_medio, - a.propqtdprodutobase, - cat.codcatn1, - cat.nomecatn1, - cat.codcatn2, - cat.nomecatn2, - cat.codcatn3, - cat.nomecatn3, - cat.codcatn4, - cat.nomecatn4, - cat.codcatn5, - cat.nomecatn5 - FROM consinco.mrl_custodia z - JOIN consinco.max_empresa e - ON e.nroempresa = z.nroempresa - JOIN consinco.mrl_custodia y - ON y.seqproduto = z.seqproduto - AND y.dtaentradasaida = z.dtaentradasaida - AND y.nroempresa = z.nroempresa - JOIN consinco.map_famdivisao d - ON d.seqfamilia = z.seqfamilia - AND d.nrodivisao = e.nrodivisao - JOIN consinco.max_divisao dv - ON dv.nrodivisao = d.nrodivisao - JOIN consinco.mad_segmento seg1 - ON seg1.nrodivisao = d.nrodivisao - JOIN consinco.mad_famsegmento h - ON h.seqfamilia = z.seqfamilia - AND h.nrosegmento = e.nrosegmentoprinc - AND h.nrosegmento = seg1.nrosegmento - JOIN consinco.map_famembalagem k - ON k.seqfamilia = h.seqfamilia - AND k.qtdembalagem = 1 - JOIN consinco.map_produto a - ON a.seqproduto = z.seqproduto - AND a.seqfamilia = d.seqfamilia - JOIN cat - ON cat.nrodivisao = d.nrodivisao - AND cat.seqfamilia = d.seqfamilia - CROSS JOIN pg - WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final - AND z.nroempresa = p_empresa - AND (p_divisao IS NULL OR INSTR(',' || p_divisao || ',', ',' || TO_CHAR(d.nrodivisao) || ',') > 0) - AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) - AND EXISTS ( - SELECT 1 - FROM consinco.maxv_abcdistribbase b - WHERE b.seqproduto = z.seqproduto - AND b.nroempresa = z.nroempresa - AND b.dtavda = z.dtaentradasaida - AND (p_cgos IS NULL OR INSTR(',' || p_cgos || ',', ',' || TO_CHAR(b.codgeraloper) || ',') > 0) - ) - GROUP BY dv.nrodivisao, - seg1.nrosegmento, - seg1.descsegmento, - e.nroempresa, - e.nomereduzido, - a.seqproduto, - a.seqprodutobase, - a.desccompleta, - z.dtaentradasaida, - a.propqtdprodutobase, - cat.codcatn1, - cat.nomecatn1, - cat.codcatn2, - cat.nomecatn2, - cat.codcatn3, - cat.nomecatn3, - cat.codcatn4, - cat.nomecatn4, - cat.codcatn5, - cat.nomecatn5 - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); - - IF r.codcatn1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.codcatn2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.codcatn3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.codcatn4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.codcatn5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); - - INSERT INTO TB_FLASH_FATO_VENDA ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda, - vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento - ) VALUES ( - SEQ_TB_FLASH_FATO_VENDA.NEXTVAL, - r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, - v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, - r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, - r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE, r.descsegmento - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa IN NUMBER -) AS - v_id_empresa NUMBER; - v_id_cat1 NUMBER; - v_id_cat2 NUMBER; - v_id_cat3 NUMBER; - v_id_cat4 NUMBER; - v_id_cat5 NUMBER; - v_id_produto NUMBER; - v_contador NUMBER := 0; - - FUNCTION FN_GET_OR_CREATE_NODO ( - p_id_nodo_pai IN NUMBER, - p_tipo_nodo IN VARCHAR2, - p_codigo IN VARCHAR2, - p_nome IN VARCHAR2, - p_nivel IN NUMBER, - p_cod_empresa IN NUMBER DEFAULT NULL, - p_cod_produto IN NUMBER DEFAULT NULL, - p_seqprodutobase IN NUMBER DEFAULT NULL - ) RETURN NUMBER - IS - v_id_nodo NUMBER; - BEGIN - SELECT n.id_nodo - INTO v_id_nodo - FROM TB_FLASH_NODO n - WHERE ( - n.id_nodo_pai = p_id_nodo_pai - OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) - ) - AND n.tipo_nodo = p_tipo_nodo - AND n.codigo = p_codigo - AND ( - p_tipo_nodo <> 'PRODUTO' - OR ( - n.cod_empresa = p_cod_empresa - OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) - ) - ); - - UPDATE TB_FLASH_NODO n - SET n.nome = p_nome, - n.cod_empresa = p_cod_empresa, - n.cod_produto = p_cod_produto, - n.seqprodutobase = p_seqprodutobase, - n.data_atualizacao = SYSDATE - WHERE n.id_nodo = v_id_nodo - AND ( - NVL(n.nome, '#') <> NVL(p_nome, '#') - OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) - OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) - OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) - ); - - RETURN v_id_nodo; - - EXCEPTION - WHEN NO_DATA_FOUND THEN - v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; - - INSERT INTO TB_FLASH_NODO ( - id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, - ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, - data_cadastro, data_atualizacao - ) VALUES ( - v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, - NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, - SYSDATE, NULL - ); - - RETURN v_id_nodo; - END; - -BEGIN - DELETE FROM TB_FLASH_FATO_VENDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final - AND cod_empresa = p_empresa; - - FOR r IN ( - SELECT dv.nrodivisao, - seg1.nrosegmento, - e.nroempresa AS empresa, - e.nomereduzido AS nomeempresa, - a.seqproduto AS cod_produto, - a.seqprodutobase, - a.desccompleta AS descricao, - z.dtaentradasaida AS data_referencia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'D')) AS dia_semana, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'DD')) AS dia, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'MM')) AS mes, - TO_NUMBER(TO_CHAR(z.dtaentradasaida,'YYYY')) AS ano, - 0 AS nro_tickets, - SUM(DECODE(y.qtdvda, 0, 0, - ((y.vlrimpostovda + - NVL(DECODE(pg.indutilicmstaresugprabc, - 'S', COALESCE(y.vlricmsvdasolicit, y.vlricmsvda), - y.vlricmsvda), 0) - + NVL(y.vlrpisvda, 0) - + NVL(y.vlrcofinsvda, 0)) / y.qtdvda)) * z.qtdvda) - + - SUM(DECODE(NVL(y.qtddevol, 0), 0, 0, - ((NVL(y.vlrimpostodevol, 0) + - NVL(DECODE(pg.indutilicmstaresugprabc, - 'S', - DECODE(y.qtdvda, 0, 0, - COALESCE((y.vlricmsvdasolicit / y.qtdvda) * y.qtddevol, - y.vlricmsdevol)), - ((z.vlricmsvda / GREATEST(z.qtdvda, 1)) * NVL(z.qtddevol, 0))), - 0) - + NVL(y.vlrpisdevol, 0) - + NVL(y.vlrcofinsdevol, 0)) / y.qtddevol)) * (0 - NVL(z.qtddevol, 0)) - ) AS vlr_imp_venda, - SUM((z.qtdvda - NVL(z.qtddevol, 0)) / k.qtdembalagem) AS qtde_venda, - (SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda, - 0 AS vl_ticket_medio, - a.propqtdprodutobase, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4, - ( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5, - ( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5 - FROM maxv_categoria g, map_famdivcateg u, map_produto a, map_famdivisao d, - map_famembalagem k, mad_segmento seg1, mrl_produtoempresa c, - mad_famsegmento h, max_empresa e, mrl_custodia y, mrl_custodia z, - mrlv_descontoregra re, max_divisao dv, max_paramgeral pg - WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final - AND z.nroempresa = p_empresa - AND e.nroempresa = z.nroempresa - AND e.nrodivisao = d.nrodivisao - AND z.seqproduto = c.seqproduto - AND e.nroempresa = c.nroempresa - AND y.seqproduto = z.seqproduto - AND y.dtaentradasaida = z.dtaentradasaida - AND y.nroempresa = z.nroempresa - AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) - AND seg1.nrodivisao = d.nrodivisao - AND h.seqfamilia = z.seqfamilia - AND h.nrosegmento = e.nrosegmentoprinc - AND h.nrosegmento = seg1.nrosegmento - AND d.seqfamilia = z.seqfamilia - AND d.nrodivisao IN (1) - AND dv.nrodivisao = d.nrodivisao - AND k.seqfamilia = h.seqfamilia - AND k.qtdembalagem = 1 - AND z.seqproduto = re.seqproduto(+) - AND z.dtaentradasaida = re.datafaturamento(+) - AND z.nroempresa = re.nroempresa(+) - AND g.nrodivisao = u.nrodivisao - AND g.nivelhierarquia = 1 - AND g.tipcategoria = 'M' - AND g.statuscategor != 'I' - AND u.seqfamilia = d.seqfamilia - AND u.nrodivisao = d.nrodivisao - AND u.seqcategoria = g.seqcategoria - AND u.status = 'A' - AND a.seqproduto = z.seqproduto - AND a.seqfamilia = d.seqfamilia - GROUP BY dv.nrodivisao, seg1.nrosegmento, e.nroempresa, e.nomereduzido, - a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, - a.propqtdprodutobase, e.nrodivisao, a.seqfamilia - ) LOOP - - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); - - IF r.codcatn1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); - ELSE v_id_cat1 := v_id_empresa; END IF; - - IF r.codcatn2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); - ELSE v_id_cat2 := v_id_cat1; END IF; - - IF r.codcatn3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); - ELSE v_id_cat3 := v_id_cat2; END IF; - - IF r.codcatn4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); - ELSE v_id_cat4 := v_id_cat3; END IF; - - IF r.codcatn5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); - ELSE v_id_cat5 := v_id_cat4; END IF; - - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); - - INSERT INTO TB_FLASH_FATO_VENDA ( - id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, - id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, - seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda, - vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro - ) VALUES ( - SEQ_TB_FLASH_FATO_VENDA.NEXTVAL, - r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, - v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, - r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, - r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE - ); - - END LOOP; - - COMMIT; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260522000003_tb_flash_nodo_resumo_venda_add_segmento.sql b/migrations/C5/20260522000003_tb_flash_nodo_resumo_venda_add_segmento.sql deleted file mode 100644 index 1dbdb90..0000000 --- a/migrations/C5/20260522000003_tb_flash_nodo_resumo_venda_add_segmento.sql +++ /dev/null @@ -1,45 +0,0 @@ --- +goose Up --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NRO_SEGMENTO'; - IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD (NRO_SEGMENTO NUMBER(24,0))'; - EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_NODO_RESUMO_VENDA.NRO_SEGMENTO IS ''Código do Segmento'''; - END IF; -END; --- +goose StatementEnd --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NOME_SEGMENTO'; - IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD (NOME_SEGMENTO VARCHAR2(300))'; - EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_NODO_RESUMO_VENDA.NOME_SEGMENTO IS ''Nome do Segmento'''; - END IF; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NRO_SEGMENTO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA DROP COLUMN NRO_SEGMENTO'; - END IF; -END; --- +goose StatementEnd --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NOME_SEGMENTO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA DROP COLUMN NOME_SEGMENTO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260522000004_prc_flash_carga_resumo_venda.sql b/migrations/C5/20260522000004_prc_flash_carga_resumo_venda.sql deleted file mode 100644 index ae54ca6..0000000 --- a/migrations/C5/20260522000004_prc_flash_carga_resumo_venda.sql +++ /dev/null @@ -1,113 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA ( - p_data_inicial IN DATE, - p_data_final IN DATE -) AS -BEGIN - DELETE FROM TB_FLASH_NODO_RESUMO_VENDA - WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; - - INSERT INTO TB_FLASH_NODO_RESUMO_VENDA ( - id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, - valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, - percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, - desvio, percentual_atingimento, data_apuracao, - nro_segmento, nome_segmento - ) - WITH datas AS ( - SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia - FROM dual - CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final) - ), - venda_direta AS ( - SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, - f.ano_referencia, f.mes_referencia, f.dia_referencia, - SUM(f.vlr_venda) AS valor_venda, - MAX(f.nrosegmento) AS nro_segmento, - MAX(f.nome_segmento) AS nome_segmento - FROM TB_FLASH_FATO_VENDA f - WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia - ), - venda_hierarquia AS ( - SELECT a.id_nodo_ancestral AS id_nodo, - d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, - SUM(NVL(vd.valor_venda, 0)) AS valor_venda - FROM ( - SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, - n.id_nodo AS id_nodo_descendente - FROM TB_FLASH_NODO n - CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai - ) a - CROSS JOIN datas d - LEFT JOIN venda_direta vd - ON vd.id_nodo = a.id_nodo_descendente - AND vd.data_referencia = d.data_referencia - GROUP BY a.id_nodo_ancestral, d.data_referencia - ), - meta_propria_diaria AS ( - SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, - MAX(m.percentual_meta) AS percentual_meta_propria, - SUM(m.valor_meta) AS valor_meta_propria - FROM TB_FLASH_META_VENDA m - WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final - GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia - ), - meta_filhos_diaria AS ( - SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, - SUM(mpd.valor_meta_propria) AS valor_meta_filhos - FROM TB_FLASH_NODO pai - JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo - JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo - GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia - ), - base AS ( - SELECT n.id_nodo, d.data_referencia, - EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, - EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, - EXTRACT(DAY FROM d.data_referencia) AS dia_referencia - FROM TB_FLASH_NODO n - CROSS JOIN datas d - ) - SELECT SEQ_TB_FLASH_NODO_RESUMO_VENDA.NEXTVAL, - b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, - vh.valor_venda, - mpd.valor_meta_propria, - mfd.valor_meta_filhos, - CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, - mpd.percentual_meta_propria, - CAST(NULL AS NUMBER(10,4)), - CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, - NVL(vh.valor_venda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), - CASE - WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL - ELSE (NVL(vh.valor_venda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 - END, - SYSDATE, - vd.nro_segmento, - vd.nome_segmento - FROM base b - LEFT JOIN venda_hierarquia vh ON vh.id_nodo = b.id_nodo AND vh.data_referencia = b.data_referencia - LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia - LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia - LEFT JOIN venda_direta vd ON vd.id_nodo = b.id_nodo AND vd.data_referencia = b.data_referencia; - - COMMIT; -END; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_VENDA' AND object_type = 'PROCEDURE'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260430000001_seq_tb_flash_nodo.sql b/migrations/C5/20260529000001_seq_tb_flash_nodo.sql similarity index 100% rename from migrations/C5/20260430000001_seq_tb_flash_nodo.sql rename to migrations/C5/20260529000001_seq_tb_flash_nodo.sql diff --git a/migrations/C5/20260430000002_tb_flash_nodo.sql b/migrations/C5/20260529000002_tb_flash_nodo.sql similarity index 57% rename from migrations/C5/20260430000002_tb_flash_nodo.sql rename to migrations/C5/20260529000002_tb_flash_nodo.sql index 0bd5ea7..217435d 100644 --- a/migrations/C5/20260430000002_tb_flash_nodo.sql +++ b/migrations/C5/20260529000002_tb_flash_nodo.sql @@ -7,29 +7,39 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_NODO ( - ID_NODO NUMBER NOT NULL, - ID_NODO_PAI NUMBER, - TIPO_NODO VARCHAR2(30) NOT NULL, - CODIGO VARCHAR2(60) NOT NULL, - NOME VARCHAR2(300) NOT NULL, - NIVEL NUMBER NOT NULL, - ORDEM_EXIBICAO NUMBER, - ATIVO CHAR(1) DEFAULT ''S'' NOT NULL, - COD_EMPRESA NUMBER, - COD_PRODUTO NUMBER, - SEQPRODUTOBASE NUMBER, - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, - DATA_ATUALIZACAO DATE, - CONSTRAINT PK_TB_FLASH_NODO PRIMARY KEY (ID_NODO), - CONSTRAINT FK_TB_FLASH_NODO_PAI FOREIGN KEY (ID_NODO_PAI) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT CK_TB_FLASH_NODO_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), + ID_NODO NUMBER NOT NULL, + ID_NODO_PAI NUMBER, + TIPO_NODO VARCHAR2(30) NOT NULL, + CODIGO VARCHAR2(60) NOT NULL, + NOME VARCHAR2(300) NOT NULL, + NIVEL NUMBER NOT NULL, + ORDEM_EXIBICAO NUMBER, + ATIVO CHAR(1) DEFAULT ''S'' NOT NULL, + COD_EMPRESA NUMBER, + COD_PRODUTO NUMBER, + SEQPRODUTOBASE NUMBER, + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + DATA_ATUALIZACAO DATE, + CONSTRAINT CK_TB_FLASH_NODO_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), CONSTRAINT CK_TB_FLASH_NODO_ATIVO CHECK (ATIVO IN (''S'', ''N'')), - CONSTRAINT CK_TB_FLASH_NODO_NIVEL CHECK (NIVEL >= 1) + CONSTRAINT CK_TB_FLASH_NODO_NIVEL CHECK (NIVEL >= 1), + CONSTRAINT PK_TB_FLASH_NODO PRIMARY KEY (ID_NODO), + CONSTRAINT UK_TB_FLASH_NODO_PAI_TIPO_COD UNIQUE (ID_NODO_PAI, TIPO_NODO, CODIGO) )'; END IF; END; -- +goose StatementEnd -- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_PAI'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO ADD CONSTRAINT FK_TB_FLASH_NODO_PAI FOREIGN KEY (ID_NODO_PAI) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin DECLARE v_count NUMBER; BEGIN @@ -73,9 +83,19 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_PAI_TIPO_COD'; + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_EMP_PROD'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO ADD CONSTRAINT UK_TB_FLASH_NODO_PAI_TIPO_COD UNIQUE (ID_NODO_PAI, TIPO_NODO, CODIGO)'; + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_EMP_PROD ON TB_FLASH_NODO (TIPO_NODO, COD_EMPRESA, COD_PRODUTO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'TB_FLASH_NODO_ID_NODO_PAI_IDX'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX TB_FLASH_NODO_ID_NODO_PAI_IDX ON TB_FLASH_NODO (ID_NODO_PAI, TIPO_NODO, CODIGO, COD_EMPRESA)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql b/migrations/C5/20260529000003_seq_tb_flash_fato_venda.sql similarity index 100% rename from migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql rename to migrations/C5/20260529000003_seq_tb_flash_fato_venda.sql diff --git a/migrations/C5/20260430000004_tb_flash_fato_venda.sql b/migrations/C5/20260529000004_tb_flash_fato_venda.sql similarity index 54% rename from migrations/C5/20260430000004_tb_flash_fato_venda.sql rename to migrations/C5/20260529000004_tb_flash_fato_venda.sql index 2e261f5..7cc6e1b 100644 --- a/migrations/C5/20260430000004_tb_flash_fato_venda.sql +++ b/migrations/C5/20260529000004_tb_flash_fato_venda.sql @@ -7,37 +7,57 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_FATO_VENDA ( - ID_FATO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2), - DIA_SEMANA NUMBER(2), - ID_NODO NUMBER NOT NULL, - ID_NODO_EMPRESA NUMBER NOT NULL, - COD_EMPRESA NUMBER NOT NULL, - NOME_EMPRESA VARCHAR2(200), - COD_PRODUTO NUMBER NOT NULL, - DESCRICAO_PRODUTO VARCHAR2(300), - SEQPRODUTOBASE NUMBER, - NRODIVISAO NUMBER, - NROSEGMENTO NUMBER, - NRO_TICKETS NUMBER(18,6), - VLR_IMP_VNEDA NUMBER(18,6), - QTDE_VENDA NUMBER(18,6), - VLR_VENDA NUMBER(18,6), - VL_TICKET_MEDIO NUMBER(18,6), - PROPQTDPRODUTOBASE NUMBER(18,6), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + ID_FATO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0), + DIA_SEMANA NUMBER(2,0), + ID_NODO NUMBER NOT NULL, + ID_NODO_EMPRESA NUMBER NOT NULL, + COD_EMPRESA NUMBER NOT NULL, + NOME_EMPRESA VARCHAR2(200), + COD_PRODUTO NUMBER NOT NULL, + DESCRICAO_PRODUTO VARCHAR2(300), + SEQPRODUTOBASE NUMBER, + NRODIVISAO NUMBER, + NROSEGMENTO NUMBER, + NRO_TICKETS NUMBER(18,6), + VLR_IMP_VENDA NUMBER(18,6), + QTDE_VENDA NUMBER(18,6), + VLR_VENDA NUMBER(18,6), + VL_TICKET_MEDIO NUMBER(18,6), + PROPQTDPRODUTOBASE NUMBER(18,6), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + NOME_SEGMENTO VARCHAR2(300), + CONSTRAINT CK_TB_FLASH_FATO_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), CONSTRAINT PK_TB_FLASH_FATO_VENDA PRIMARY KEY (ID_FATO), - CONSTRAINT FK_TB_FLASH_FATO_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT FK_TB_FLASH_FATO_VENDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT CK_TB_FLASH_FATO_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12) + CONSTRAINT UK_TB_FLASH_FATO_VENDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO) )'; END IF; END; -- +goose StatementEnd -- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin DECLARE v_count NUMBER; BEGIN @@ -91,9 +111,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_VENDA'; + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT UK_TB_FLASH_FATO_VENDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)'; + EXECUTE IMMEDIATE 'CREATE INDEX TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX ON TB_FLASH_FATO_VENDA (DATA_REFERENCIA, COD_EMPRESA)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql b/migrations/C5/20260529000005_seq_tb_flash_meta_venda.sql similarity index 100% rename from migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql rename to migrations/C5/20260529000005_seq_tb_flash_meta_venda.sql diff --git a/migrations/C5/20260430000006_tb_flash_meta_venda.sql b/migrations/C5/20260529000006_tb_flash_meta_venda.sql similarity index 70% rename from migrations/C5/20260430000006_tb_flash_meta_venda.sql rename to migrations/C5/20260529000006_tb_flash_meta_venda.sql index 8a99020..48813e6 100644 --- a/migrations/C5/20260430000006_tb_flash_meta_venda.sql +++ b/migrations/C5/20260529000006_tb_flash_meta_venda.sql @@ -7,21 +7,21 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_VENDA ( - ID_META NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, - DATA_ATUALIZACAO DATE, - CONSTRAINT PK_TB_FLASH_META_VENDA PRIMARY KEY (ID_META), - CONSTRAINT FK_TB_FLASH_META_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_META NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + DATA_ATUALIZACAO DATE, CONSTRAINT CK_TB_FLASH_META_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_META_VENDA PRIMARY KEY (ID_META), + CONSTRAINT UK_TB_FLASH_META_VENDA UNIQUE (ID_NODO, DATA_REFERENCIA) )'; END IF; END; @@ -30,9 +30,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_META_VENDA'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_META_VENDA_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_VENDA ADD CONSTRAINT UK_TB_FLASH_META_VENDA UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_VENDA ADD CONSTRAINT FK_TB_FLASH_META_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql b/migrations/C5/20260529000007_tb_flash_meta_venda_stg.sql similarity index 62% rename from migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql rename to migrations/C5/20260529000007_tb_flash_meta_venda_stg.sql index 78144c6..ef254a3 100644 --- a/migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql +++ b/migrations/C5/20260529000007_tb_flash_meta_venda_stg.sql @@ -7,24 +7,24 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_VENDA_STG ( - COD_EMPRESA NUMBER NOT NULL, - TIPO_NODO VARCHAR2(30) NOT NULL, - CODIGO_NODO VARCHAR2(60) NOT NULL, - CODIGO_NODO_PAI VARCHAR2(60), - TIPO_NODO_PAI VARCHAR2(30), - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - ORIGEM_META VARCHAR2(100), - DATA_CARGA DATE DEFAULT SYSDATE, - CONSTRAINT CK_TB_FLASH_META_VDA_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), + COD_EMPRESA NUMBER NOT NULL, + TIPO_NODO VARCHAR2(30) NOT NULL, + CODIGO_NODO VARCHAR2(60) NOT NULL, + CODIGO_NODO_PAI VARCHAR2(60), + TIPO_NODO_PAI VARCHAR2(30), + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + ORIGEM_META VARCHAR2(100), + DATA_CARGA DATE DEFAULT SYSDATE, + CONSTRAINT CK_TB_FLASH_META_VDA_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), CONSTRAINT CK_TB_FLASH_META_VDA_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL), - CONSTRAINT CK_TB_FLASH_META_VDA_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_VDA_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_VDA_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), + CONSTRAINT CK_TB_FLASH_META_VDA_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) )'; END IF; END; diff --git a/migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql b/migrations/C5/20260529000008_vw_flash_meta_venda_stg.sql similarity index 100% rename from migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql rename to migrations/C5/20260529000008_vw_flash_meta_venda_stg.sql diff --git a/migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql b/migrations/C5/20260529000009_seq_tb_flash_nodo_resumo_venda.sql similarity index 100% rename from migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql rename to migrations/C5/20260529000009_seq_tb_flash_nodo_resumo_venda.sql diff --git a/migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql b/migrations/C5/20260529000010_tb_flash_nodo_resumo_venda.sql similarity index 62% rename from migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql rename to migrations/C5/20260529000010_tb_flash_nodo_resumo_venda.sql index e3bdb44..e7a8c8e 100644 --- a/migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql +++ b/migrations/C5/20260529000010_tb_flash_nodo_resumo_venda.sql @@ -7,26 +7,28 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_NODO_RESUMO_VENDA ( - ID_RESUMO NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - VALOR_VENDA NUMBER(18,6), - VALOR_META_PROPRIA NUMBER(18,6), - VALOR_META_FILHOS NUMBER(18,6), - VALOR_META_EFETIVA NUMBER(18,6), - PERCENTUAL_META_PROPRIA NUMBER(10,4), - PERCENTUAL_META_FILHOS NUMBER(10,4), - PERCENTUAL_META_EFETIVA NUMBER(10,4), - DESVIO NUMBER(18,6), - PERCENTUAL_ATINGIMENTO NUMBER(18,6), - DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, - CONSTRAINT PK_TB_FLASH_NODO_RES_VENDA PRIMARY KEY (ID_RESUMO), - CONSTRAINT FK_TB_FLASH_NODO_RES_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_RESUMO NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + VALOR_VENDA NUMBER(18,6), + VALOR_META_PROPRIA NUMBER(18,6), + VALOR_META_FILHOS NUMBER(18,6), + VALOR_META_EFETIVA NUMBER(18,6), + PERCENTUAL_META_PROPRIA NUMBER(10,4), + PERCENTUAL_META_FILHOS NUMBER(10,4), + PERCENTUAL_META_EFETIVA NUMBER(10,4), + DESVIO NUMBER(18,6), + PERCENTUAL_ATINGIMENTO NUMBER(18,6), + DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, + NRO_SEGMENTO NUMBER(24,0), + NOME_SEGMENTO VARCHAR2(300), CONSTRAINT CK_TB_FLASH_NODO_RES_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_NODO_RES_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_NODO_RES_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_NODO_RES_VENDA PRIMARY KEY (ID_RESUMO), + CONSTRAINT UK_TB_FLASH_NODO_RES_VENDA UNIQUE (ID_NODO, DATA_REFERENCIA) )'; END IF; END; @@ -35,9 +37,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_VENDA'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_VENDA_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD CONSTRAINT UK_TB_FLASH_NODO_RES_VENDA UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD CONSTRAINT FK_TB_FLASH_NODO_RES_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql b/migrations/C5/20260529000011_prc_flash_carga_meta_venda_stg.sql similarity index 94% rename from migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql rename to migrations/C5/20260529000011_prc_flash_carga_meta_venda_stg.sql index 24b56c3..4e30241 100644 --- a/migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql +++ b/migrations/C5/20260529000011_prc_flash_carga_meta_venda_stg.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_VENDA_STG ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_VENDA_STG ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql b/migrations/C5/20260529000012_prc_flash_carga_meta_venda.sql similarity index 98% rename from migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql rename to migrations/C5/20260529000012_prc_flash_carga_meta_venda.sql index b27afa3..a82a654 100644 --- a/migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql +++ b/migrations/C5/20260529000012_prc_flash_carga_meta_venda.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_VENDA ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_VENDA ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260529000013_prc_flash_carga_resumo_venda.sql b/migrations/C5/20260529000013_prc_flash_carga_resumo_venda.sql new file mode 100644 index 0000000..52d5056 --- /dev/null +++ b/migrations/C5/20260529000013_prc_flash_carga_resumo_venda.sql @@ -0,0 +1,112 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_VENDA ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_NODO_RESUMO_VENDA + WHERE data_referencia >= TRUNC(p_data_inicial) + AND data_referencia < TRUNC(p_data_final) + 1; + + INSERT INTO TB_FLASH_NODO_RESUMO_VENDA ( + id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, + percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, + desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento + ) + WITH venda_direta AS ( + SELECT f.id_nodo, + TRUNC(f.data_referencia) AS data_referencia, + EXTRACT(YEAR FROM TRUNC(f.data_referencia)) AS ano_referencia, + EXTRACT(MONTH FROM TRUNC(f.data_referencia)) AS mes_referencia, + EXTRACT(DAY FROM TRUNC(f.data_referencia)) AS dia_referencia, + SUM(f.vlr_venda) AS valor_venda, + MAX(f.nrosegmento) AS nro_segmento, + MAX(f.nome_segmento) AS nome_segmento + FROM TB_FLASH_FATO_VENDA f + WHERE f.data_referencia >= TRUNC(p_data_inicial) + AND f.data_referencia < TRUNC(p_data_final) + 1 + GROUP BY f.id_nodo, TRUNC(f.data_referencia) + ), + hierarquia AS ( + SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, + n.id_nodo AS id_nodo_descendente + FROM TB_FLASH_NODO n + CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai + ), + venda_hierarquia AS ( + SELECT h.id_nodo_ancestral AS id_nodo, + vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia, + SUM(vd.valor_venda) AS valor_venda + FROM hierarquia h + JOIN venda_direta vd ON vd.id_nodo = h.id_nodo_descendente + GROUP BY h.id_nodo_ancestral, vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia + ), + meta_propria_diaria AS ( + SELECT m.id_nodo, + TRUNC(m.data_referencia) AS data_referencia, + EXTRACT(YEAR FROM TRUNC(m.data_referencia)) AS ano_referencia, + EXTRACT(MONTH FROM TRUNC(m.data_referencia)) AS mes_referencia, + EXTRACT(DAY FROM TRUNC(m.data_referencia)) AS dia_referencia, + MAX(m.percentual_meta) AS percentual_meta_propria, + SUM(m.valor_meta) AS valor_meta_propria + FROM TB_FLASH_META_VENDA m + WHERE m.data_referencia >= TRUNC(p_data_inicial) + AND m.data_referencia < TRUNC(p_data_final) + 1 + GROUP BY m.id_nodo, TRUNC(m.data_referencia) + ), + meta_filhos_diaria AS ( + SELECT pai.id_nodo, + mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, + SUM(mpd.valor_meta_propria) AS valor_meta_filhos + FROM TB_FLASH_NODO pai + JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo + JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo + GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia + ), + base AS ( + SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM venda_hierarquia + UNION + SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM meta_propria_diaria + UNION + SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM meta_filhos_diaria + ) + SELECT SEQ_TB_FLASH_NODO_RESUMO_VENDA.NEXTVAL, + b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, + NVL(vh.valor_venda, 0) AS valor_venda, + mpd.valor_meta_propria, + mfd.valor_meta_filhos, + CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva, + mpd.percentual_meta_propria, + CAST(NULL AS NUMBER(10,4)) AS percentual_meta_filhos, + CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END AS percentual_meta_efetiva, + NVL(vh.valor_venda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) AS desvio, + CASE + WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL + ELSE NVL(vh.valor_venda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END * 100 + END AS percentual_atingimento, + SYSDATE, + vd.nro_segmento, + vd.nome_segmento + FROM base b + LEFT JOIN venda_hierarquia vh ON vh.id_nodo = b.id_nodo AND vh.data_referencia = b.data_referencia + LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia + LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia + LEFT JOIN venda_direta vd ON vd.id_nodo = b.id_nodo AND vd.data_referencia = b.data_referencia; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_VENDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260529000014_prc_flash_carga_dados_venda.sql b/migrations/C5/20260529000014_prc_flash_carga_dados_venda.sql new file mode 100644 index 0000000..7d23228 --- /dev/null +++ b/migrations/C5/20260529000014_prc_flash_carga_dados_venda.sql @@ -0,0 +1,111 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL +) AS +BEGIN + DELETE FROM TB_FLASH_FATO_VENDA + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + INSERT INTO TB_FLASH_FATO_VENDA ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda, + vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento + ) + WITH pg AS ( + SELECT MAX(indutilicmstaresugprabc) AS indutilicmstaresugprabc + FROM consinco.max_paramgeral + ), + cat AS ( + SELECT dc.nrodivisao, dc.seqfamilia, + MAX(CASE WHEN cc.nivelhierarquia = 1 THEN dc.seqcategoria END) AS codcatn1, + MAX(CASE WHEN cc.nivelhierarquia = 1 THEN cc.categoria END) AS nomecatn1, + MAX(CASE WHEN cc.nivelhierarquia = 2 THEN dc.seqcategoria END) AS codcatn2, + MAX(CASE WHEN cc.nivelhierarquia = 2 THEN cc.categoria END) AS nomecatn2, + MAX(CASE WHEN cc.nivelhierarquia = 3 THEN dc.seqcategoria END) AS codcatn3, + MAX(CASE WHEN cc.nivelhierarquia = 3 THEN cc.categoria END) AS nomecatn3, + MAX(CASE WHEN cc.nivelhierarquia = 4 THEN dc.seqcategoria END) AS codcatn4, + MAX(CASE WHEN cc.nivelhierarquia = 4 THEN cc.categoria END) AS nomecatn4, + MAX(CASE WHEN cc.nivelhierarquia = 5 THEN dc.seqcategoria END) AS codcatn5, + MAX(CASE WHEN cc.nivelhierarquia = 5 THEN cc.categoria END) AS nomecatn5 + FROM consinco.map_famdivcateg dc + JOIN consinco.map_categoria cc + ON cc.seqcategoria = dc.seqcategoria AND cc.nrodivisao = dc.nrodivisao + AND cc.statuscategor = 'A' AND cc.tipcategoria = 'M' AND cc.nivelhierarquia BETWEEN 1 AND 5 + WHERE dc.status = 'A' + GROUP BY dc.nrodivisao, dc.seqfamilia + ), + dados AS ( + SELECT dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, + e.nroempresa AS empresa, e.nomereduzido AS nomeempresa, + a.seqproduto AS cod_produto, a.seqprodutobase, a.desccompleta AS descricao, + z.dtaentradasaida AS data_referencia, + TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'D')) AS dia_semana, + TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'DD')) AS dia, + TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'MM')) AS mes, + TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'YYYY')) AS ano, + 0 AS nro_tickets, + SUM(DECODE(y.qtdvda,0,0,(y.vlrimpostovda+NVL(DECODE(pg.indutilicmstaresugprabc,'S',COALESCE(y.vlricmsvdasolicit,y.vlricmsvda),y.vlricmsvda),0)+NVL(y.vlrpisvda,0)+NVL(y.vlrcofinsvda,0))/y.qtdvda)*z.qtdvda) + +SUM(DECODE(NVL(y.qtddevol,0),0,0,(NVL(y.vlrimpostodevol,0)+NVL(DECODE(pg.indutilicmstaresugprabc,'S',DECODE(y.qtdvda,0,0,COALESCE((y.vlricmsvdasolicit/y.qtdvda)*y.qtddevol,y.vlricmsdevol)),((z.vlricmsvda/GREATEST(z.qtdvda,1))*NVL(z.qtddevol,0))),0)+NVL(y.vlrpisdevol,0)+NVL(y.vlrcofinsdevol,0))/y.qtddevol)*(0-NVL(z.qtddevol,0))) AS vlr_imp_venda, + SUM((z.qtdvda - NVL(z.qtddevol,0)) / k.qtdembalagem) AS qtde_venda, + SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol,0)) AS vlr_venda, + 0 AS vl_ticket_medio, + a.propqtdprodutobase + FROM consinco.mrl_custodia z + JOIN consinco.max_empresa e ON e.nroempresa = z.nroempresa + JOIN consinco.mrl_custodia y ON y.seqproduto = z.seqproduto AND y.dtaentradasaida = z.dtaentradasaida AND y.nroempresa = z.nroempresa + JOIN consinco.map_famdivisao d ON d.seqfamilia = z.seqfamilia AND d.nrodivisao = e.nrodivisao + JOIN consinco.max_divisao dv ON dv.nrodivisao = d.nrodivisao + JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = d.nrodivisao + JOIN consinco.mad_famsegmento h ON h.seqfamilia = z.seqfamilia AND h.nrosegmento = e.nrosegmentoprinc AND h.nrosegmento = seg1.nrosegmento + JOIN consinco.map_famembalagem k ON k.seqfamilia = h.seqfamilia AND k.qtdembalagem = 1 + JOIN consinco.map_produto a ON a.seqproduto = z.seqproduto AND a.seqfamilia = d.seqfamilia + JOIN cat ON cat.nrodivisao = d.nrodivisao AND cat.seqfamilia = d.seqfamilia + CROSS JOIN pg + WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final + AND z.nroempresa = p_empresa + AND (p_divisao IS NULL OR d.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL)) + AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) + AND EXISTS (SELECT 1 FROM consinco.maxv_abcdistribbase b WHERE b.seqproduto=z.seqproduto AND b.nroempresa=z.nroempresa AND b.dtavda=z.dtaentradasaida AND (p_cgos IS NULL OR b.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL))) + GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido, + a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, a.propqtdprodutobase + ), + nodo_empresa AS ( + SELECT codigo, MAX(id_nodo) AS id_nodo + FROM TB_FLASH_NODO WHERE tipo_nodo = 'EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo + ), + nodo_produto AS ( + SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo + FROM TB_FLASH_NODO WHERE tipo_nodo = 'PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase + ) + SELECT SEQ_TB_FLASH_FATO_VENDA.NEXTVAL, + r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, + np.id_nodo AS id_nodo, ne.id_nodo AS id_nodo_empresa, + r.empresa, r.nomeempresa, r.cod_produto, r.descricao, r.seqprodutobase, + r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, r.qtde_venda, + r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE, r.descsegmento + FROM dados r + JOIN nodo_empresa ne ON ne.codigo = TO_CHAR(r.empresa) + JOIN nodo_produto np ON np.codigo = TO_CHAR(r.cod_produto) AND np.cod_empresa = r.empresa AND NVL(np.seqprodutobase,-1) = NVL(r.seqprodutobase,-1); + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_VENDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql b/migrations/C5/20260529000015_prc_flash_atualiza_venda_dono.sql similarity index 65% rename from migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql rename to migrations/C5/20260529000015_prc_flash_atualiza_venda_dono.sql index e663470..f5ec2c0 100644 --- a/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql +++ b/migrations/C5/20260529000015_prc_flash_atualiza_venda_dono.sql @@ -13,14 +13,18 @@ BEGIN DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); FOR r IN ( - SELECT codigo - FROM vitruvio.vi_lojas - WHERE (p_empresas IS NULL OR INSTR(',' || p_empresas || ',', ',' || TO_CHAR(codigo) || ',') > 0) - ORDER BY codigo + SELECT CODIGO_EXTERNO AS CODIGO + FROM vitruvio.vi_lojas V + WHERE p_empresas IS NULL + OR CODIGO_EXTERNO IN ( + SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) + FROM dual + CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL + ) + ORDER BY CODIGO_EXTERNO ) LOOP BEGIN DBMS_OUTPUT.PUT_LINE('Carregando venda da empresa: ' || r.codigo); - PRC_FLASH_CARGA_DADOS_VENDA( p_data_inicial => p_data_inicial, p_data_final => p_data_final, @@ -28,36 +32,21 @@ BEGIN p_divisao => p_divisao, p_cgos => p_cgos ); - EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE( - 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM - ); + DBMS_OUTPUT.PUT_LINE('Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM); RAISE; END; END LOOP; DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de venda...'); - - PRC_FLASH_CARGA_META_VENDA_STG( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_VENDA_STG(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Carregando metas finais de venda...'); - - PRC_FLASH_CARGA_META_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_VENDA(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Atualizando resumo de venda...'); - - PRC_FLASH_CARGA_RESUMO_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_RESUMO_VENDA(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); @@ -74,9 +63,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE'; IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO'; + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_VENDA_DONO'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql b/migrations/C5/20260529000016_seq_tb_flash_fato_contribuicao.sql similarity index 99% rename from migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql rename to migrations/C5/20260529000016_seq_tb_flash_fato_contribuicao.sql index 96e423d..169f621 100644 --- a/migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql +++ b/migrations/C5/20260529000016_seq_tb_flash_fato_contribuicao.sql @@ -21,4 +21,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260507000002_tb_flash_fato_contribuicao.sql b/migrations/C5/20260529000017_tb_flash_fato_contribuicao.sql similarity index 58% rename from migrations/C5/20260507000002_tb_flash_fato_contribuicao.sql rename to migrations/C5/20260529000017_tb_flash_fato_contribuicao.sql index 07062f1..7e42b37 100644 --- a/migrations/C5/20260507000002_tb_flash_fato_contribuicao.sql +++ b/migrations/C5/20260529000017_tb_flash_fato_contribuicao.sql @@ -7,37 +7,57 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_FATO_CONTRIBUICAO ( - ID_FATO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2), - DIA_SEMANA NUMBER(2), - ID_NODO NUMBER NOT NULL, - ID_NODO_EMPRESA NUMBER NOT NULL, - COD_EMPRESA NUMBER NOT NULL, - NOME_EMPRESA VARCHAR2(200), - COD_PRODUTO NUMBER NOT NULL, - DESCRICAO_PRODUTO VARCHAR2(300), - SEQPRODUTOBASE NUMBER, - NRODIVISAO NUMBER, - NROSEGMENTO NUMBER, - NRO_TICKETS NUMBER(18,6), - VLR_IMP_CONTRIBUICAO NUMBER(18,6), - QTDE_CONTRIBUICAO NUMBER(18,6), - VLR_CONTRIBUICAO NUMBER(18,6), - VL_TICKET_MEDIO NUMBER(18,6), - PROPQTDPRODUTOBASE NUMBER(18,6), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + ID_FATO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0), + DIA_SEMANA NUMBER(2,0), + ID_NODO NUMBER NOT NULL, + ID_NODO_EMPRESA NUMBER NOT NULL, + COD_EMPRESA NUMBER NOT NULL, + NOME_EMPRESA VARCHAR2(200), + COD_PRODUTO NUMBER NOT NULL, + DESCRICAO_PRODUTO VARCHAR2(300), + SEQPRODUTOBASE NUMBER, + NRODIVISAO NUMBER, + NROSEGMENTO NUMBER, + NRO_TICKETS NUMBER(18,6), + VLR_IMP_CONTRIBUICAO NUMBER(18,6), + QTDE_CONTRIBUICAO NUMBER(18,6), + VLR_CONTRIBUICAO NUMBER(18,6), + VL_TICKET_MEDIO NUMBER(18,6), + PROPQTDPRODUTOBASE NUMBER(18,6), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + NOME_SEGMENTO VARCHAR2(300), + CONSTRAINT CK_TB_FLASH_FATO_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), CONSTRAINT PK_TB_FLASH_FATO_CONTRIBUICAO PRIMARY KEY (ID_FATO), - CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT CK_TB_FLASH_FATO_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12) + CONSTRAINT UK_TB_FLASH_FATO_CONTRIBUICAO UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO) )'; END IF; END; -- +goose StatementEnd -- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_CONTRIB_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_CONTRIB_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin DECLARE v_count NUMBER; BEGIN @@ -87,16 +107,6 @@ BEGIN END IF; END; -- +goose StatementEnd --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_CONTRIBUICAO'; - IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_FATO_CONTRIBUICAO UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)'; - END IF; -END; --- +goose StatementEnd -- +goose Down -- +goose StatementBegin @@ -109,4 +119,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260507000016_seq_tb_flash_meta_contribuicao.sql b/migrations/C5/20260529000018_seq_tb_flash_meta_contribuicao.sql similarity index 100% rename from migrations/C5/20260507000016_seq_tb_flash_meta_contribuicao.sql rename to migrations/C5/20260529000018_seq_tb_flash_meta_contribuicao.sql diff --git a/migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql b/migrations/C5/20260529000019_tb_flash_meta_contribuicao.sql similarity index 70% rename from migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql rename to migrations/C5/20260529000019_tb_flash_meta_contribuicao.sql index c85e469..894a843 100644 --- a/migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql +++ b/migrations/C5/20260529000019_tb_flash_meta_contribuicao.sql @@ -7,21 +7,21 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_CONTRIBUICAO ( - ID_META NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, - DATA_ATUALIZACAO DATE, - CONSTRAINT PK_TB_FLASH_META_CONTRIBUICAO PRIMARY KEY (ID_META), - CONSTRAINT FK_TB_FLASH_META_CONTRIBUICAO_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_META NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + DATA_ATUALIZACAO DATE, CONSTRAINT CK_TB_FLASH_META_CONTRIBUICAO_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_CONTRIBUICAO_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_CONTRIBUICAO_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_META_CONTRIBUICAO PRIMARY KEY (ID_META), + CONSTRAINT UK_TB_FLASH_META_CONTRIBUICAO UNIQUE (ID_NODO, DATA_REFERENCIA) )'; END IF; END; @@ -30,9 +30,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_META_CONTRIBUICAO'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_META_CONTRIBUICAO_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_META_CONTRIBUICAO UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_META_CONTRIBUICAO_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql b/migrations/C5/20260529000020_tb_flash_meta_contribuicao_stg.sql similarity index 63% rename from migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql rename to migrations/C5/20260529000020_tb_flash_meta_contribuicao_stg.sql index 24e4b1f..e0d8694 100644 --- a/migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql +++ b/migrations/C5/20260529000020_tb_flash_meta_contribuicao_stg.sql @@ -7,24 +7,24 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_CONTRIBUICAO_STG ( - COD_EMPRESA NUMBER NOT NULL, - TIPO_NODO VARCHAR2(30) NOT NULL, - CODIGO_NODO VARCHAR2(60) NOT NULL, - CODIGO_NODO_PAI VARCHAR2(60), - TIPO_NODO_PAI VARCHAR2(30), - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - ORIGEM_META VARCHAR2(100), - DATA_CARGA DATE DEFAULT SYSDATE, - CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), + COD_EMPRESA NUMBER NOT NULL, + TIPO_NODO VARCHAR2(30) NOT NULL, + CODIGO_NODO VARCHAR2(60) NOT NULL, + CODIGO_NODO_PAI VARCHAR2(60), + TIPO_NODO_PAI VARCHAR2(30), + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + ORIGEM_META VARCHAR2(100), + DATA_CARGA DATE DEFAULT SYSDATE, + CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL), - CONSTRAINT CK_TB_FLASH_META_CTB_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_CTB_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_CTB_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), + CONSTRAINT CK_TB_FLASH_META_CTB_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) )'; END IF; END; @@ -71,4 +71,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260507000015_vw_flash_meta_contribuicao_stg.sql b/migrations/C5/20260529000021_vw_flash_meta_contribuicao_stg.sql similarity index 99% rename from migrations/C5/20260507000015_vw_flash_meta_contribuicao_stg.sql rename to migrations/C5/20260529000021_vw_flash_meta_contribuicao_stg.sql index 4d68566..76d9027 100644 --- a/migrations/C5/20260507000015_vw_flash_meta_contribuicao_stg.sql +++ b/migrations/C5/20260529000021_vw_flash_meta_contribuicao_stg.sql @@ -31,4 +31,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql b/migrations/C5/20260529000022_seq_tb_flash_nodo_resumo_contribuicao.sql similarity index 99% rename from migrations/C5/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql rename to migrations/C5/20260529000022_seq_tb_flash_nodo_resumo_contribuicao.sql index 064b5cf..426e103 100644 --- a/migrations/C5/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql +++ b/migrations/C5/20260529000022_seq_tb_flash_nodo_resumo_contribuicao.sql @@ -21,4 +21,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260507000010_tb_flash_nodo_resumo_contribuicao.sql b/migrations/C5/20260529000023_tb_flash_nodo_resumo_contribuicao.sql similarity index 59% rename from migrations/C5/20260507000010_tb_flash_nodo_resumo_contribuicao.sql rename to migrations/C5/20260529000023_tb_flash_nodo_resumo_contribuicao.sql index 7b8d179..bb071e7 100644 --- a/migrations/C5/20260507000010_tb_flash_nodo_resumo_contribuicao.sql +++ b/migrations/C5/20260529000023_tb_flash_nodo_resumo_contribuicao.sql @@ -7,30 +7,32 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( - ID_RESUMO NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - NRO_TICKETS NUMBER(18,6), - VLR_IMP_CONTRIBUICAO NUMBER(18,6), - QTDE_CONTRIBUICAO NUMBER(18,6), - VLR_CONTRIBUICAO NUMBER(18,6), - VL_TICKET_MEDIO NUMBER(18,6), - VALOR_META_PROPRIA NUMBER(18,6), - VALOR_META_FILHOS NUMBER(18,6), - VALOR_META_EFETIVA NUMBER(18,6), - PERCENTUAL_META_PROPRIA NUMBER(10,4), - PERCENTUAL_META_FILHOS NUMBER(10,4), - PERCENTUAL_META_EFETIVA NUMBER(10,4), - DESVIO NUMBER(18,6), - PERCENTUAL_ATINGIMENTO NUMBER(18,6), - DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, - CONSTRAINT PK_TB_FLASH_NODO_RES_CONTRIB PRIMARY KEY (ID_RESUMO), - CONSTRAINT FK_TB_FLASH_NODO_RES_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_RESUMO NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + NRO_TICKETS NUMBER(18,6), + VLR_IMP_CONTRIBUICAO NUMBER(18,6), + QTDE_CONTRIBUICAO NUMBER(18,6), + VLR_CONTRIBUICAO NUMBER(18,6), + VL_TICKET_MEDIO NUMBER(18,6), + VALOR_META_PROPRIA NUMBER(18,6), + VALOR_META_FILHOS NUMBER(18,6), + VALOR_META_EFETIVA NUMBER(18,6), + PERCENTUAL_META_PROPRIA NUMBER(10,4), + PERCENTUAL_META_FILHOS NUMBER(10,4), + PERCENTUAL_META_EFETIVA NUMBER(10,4), + DESVIO NUMBER(18,6), + PERCENTUAL_ATINGIMENTO NUMBER(18,6), + DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, + NRO_SEGMENTO NUMBER(24,0), + NOME_SEGMENTO VARCHAR2(300), CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_NODO_RES_CONTRIB PRIMARY KEY (ID_RESUMO), + CONSTRAINT UK_TB_FLASH_NODO_RES_CONTRIB UNIQUE (ID_NODO, DATA_REFERENCIA, NRO_SEGMENTO) )'; END IF; END; @@ -39,9 +41,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_CONTRIB'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_CONTRIB_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_NODO_RES_CONTRIB UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_NODO_RES_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd @@ -87,4 +89,3 @@ BEGIN END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql b/migrations/C5/20260529000024_prc_flash_carga_meta_contribuicao_stg.sql similarity index 94% rename from migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql rename to migrations/C5/20260529000024_prc_flash_carga_meta_contribuicao_stg.sql index 43c4593..539b98d 100644 --- a/migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql +++ b/migrations/C5/20260529000024_prc_flash_carga_meta_contribuicao_stg.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO_STG ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_CONTRIBUICAO_STG ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql b/migrations/C5/20260529000025_prc_flash_carga_meta_contribuicao.sql similarity index 98% rename from migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql rename to migrations/C5/20260529000025_prc_flash_carga_meta_contribuicao.sql index 2e4256f..db7416d 100644 --- a/migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql +++ b/migrations/C5/20260529000025_prc_flash_carga_meta_contribuicao.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_CONTRIBUICAO ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260529000026_prc_flash_carga_resumo_contribuicao.sql b/migrations/C5/20260529000026_prc_flash_carga_resumo_contribuicao.sql new file mode 100644 index 0000000..85faf22 --- /dev/null +++ b/migrations/C5/20260529000026_prc_flash_carga_resumo_contribuicao.sql @@ -0,0 +1,117 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_NODO_RESUMO_CONTRIBUICAO + WHERE data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final); + + INSERT /*+ APPEND */ INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( + id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, vlr_contribuicao, vl_ticket_medio, + valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, + percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, + desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento + ) + WITH + hierarquia AS ( + SELECT /*+ MATERIALIZE */ + CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, + n.id_nodo AS id_nodo_descendente + FROM TB_FLASH_NODO n + CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai + ), + contribuicao_direta AS ( + SELECT /*+ MATERIALIZE */ + f.id_nodo, + TRUNC(f.data_referencia) AS data_referencia, + f.ano_referencia, f.mes_referencia, f.dia_referencia, + f.nrosegmento, f.nome_segmento, + SUM(f.nro_tickets) AS nro_tickets, + SUM(f.vlr_imp_contribuicao) AS vlr_imp_contribuicao, + SUM(f.qtde_contribuicao) AS qtde_contribuicao, + SUM(f.vlr_contribuicao) AS vlr_contribuicao + FROM TB_FLASH_FATO_CONTRIBUICAO f + WHERE f.data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final) + GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia, f.nrosegmento, f.nome_segmento + ), + contribuicao_hierarquia AS ( + SELECT h.id_nodo_ancestral AS id_nodo, + cd.data_referencia, cd.ano_referencia, cd.mes_referencia, cd.dia_referencia, + cd.nrosegmento, cd.nome_segmento, + SUM(cd.nro_tickets) AS nro_tickets, + SUM(cd.vlr_imp_contribuicao) AS vlr_imp_contribuicao, + SUM(cd.qtde_contribuicao) AS qtde_contribuicao, + SUM(cd.vlr_contribuicao) AS vlr_contribuicao + FROM hierarquia h + JOIN contribuicao_direta cd ON cd.id_nodo = h.id_nodo_descendente + GROUP BY h.id_nodo_ancestral, cd.data_referencia, cd.ano_referencia, cd.mes_referencia, cd.dia_referencia, cd.nrosegmento, cd.nome_segmento + ), + meta_propria_diaria AS ( + SELECT /*+ MATERIALIZE */ + m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, + MAX(m.percentual_meta) AS percentual_meta_propria, + SUM(m.valor_meta) AS valor_meta_propria + FROM TB_FLASH_META_CONTRIBUICAO m + WHERE m.data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final) + GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia + ), + meta_filhos_diaria AS ( + SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, + SUM(mpd.valor_meta_propria) AS valor_meta_filhos + FROM TB_FLASH_NODO pai + JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo + JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo + GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia + ), + base AS ( + SELECT DISTINCT n.id_nodo, ch.data_referencia, ch.ano_referencia, ch.mes_referencia, ch.dia_referencia, ch.nrosegmento, ch.nome_segmento + FROM contribuicao_hierarquia ch JOIN TB_FLASH_NODO n ON n.id_nodo = ch.id_nodo + UNION + SELECT DISTINCT n.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, NULL AS nrosegmento, NULL AS nome_segmento + FROM meta_propria_diaria m JOIN TB_FLASH_NODO n ON n.id_nodo = m.id_nodo + ), + calculo AS ( + SELECT b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, + b.nrosegmento, b.nome_segmento, + NVL(ch.nro_tickets, 0) AS nro_tickets, + NVL(ch.vlr_imp_contribuicao, 0) AS vlr_imp_contribuicao, + NVL(ch.qtde_contribuicao, 0) AS qtde_contribuicao, + NVL(ch.vlr_contribuicao, 0) AS vlr_contribuicao, + mpd.valor_meta_propria, mfd.valor_meta_filhos, mpd.percentual_meta_propria, + CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva + FROM base b + LEFT JOIN contribuicao_hierarquia ch ON ch.id_nodo = b.id_nodo AND ch.data_referencia = b.data_referencia AND ch.nrosegmento = b.nrosegmento + LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia + LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia + ) + SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL, + c.id_nodo, c.data_referencia, c.ano_referencia, c.mes_referencia, c.dia_referencia, + c.nro_tickets, c.vlr_imp_contribuicao, c.qtde_contribuicao, c.vlr_contribuicao, + CASE WHEN c.nro_tickets > 0 THEN c.vlr_contribuicao / c.nro_tickets ELSE NULL END, + c.valor_meta_propria, c.valor_meta_filhos, c.valor_meta_efetiva, + c.percentual_meta_propria, + CAST(NULL AS NUMBER(10,4)), + CASE WHEN c.percentual_meta_propria IS NOT NULL THEN c.percentual_meta_propria ELSE NULL END, + c.vlr_contribuicao - NVL(c.valor_meta_efetiva, 0), + CASE WHEN NVL(c.valor_meta_efetiva, 0) = 0 THEN NULL ELSE (c.vlr_contribuicao / c.valor_meta_efetiva) * 100 END, + SYSDATE, c.nrosegmento, c.nome_segmento + FROM calculo c; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260529000027_prc_flash_carga_dados_contribuicao.sql b/migrations/C5/20260529000027_prc_flash_carga_dados_contribuicao.sql new file mode 100644 index 0000000..8ec7289 --- /dev/null +++ b/migrations/C5/20260529000027_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,105 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL +) AS +BEGIN + DELETE FROM TB_FLASH_FATO_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, + vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento + ) + WITH + CGOS AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL))) AS CODGERALOPER FROM DUAL CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL), + DIVISOES AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL))) AS NRODIVISAO FROM DUAL CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL), + CATEG AS ( + SELECT DC.SEQFAMILIA, DC.NRODIVISAO, + MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN2, + MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.CATEGORIA END) AS CATEGORIAN2, + MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN3, + MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.CATEGORIA END) AS CATEGORIAN3, + MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN4, + MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.CATEGORIA END) AS CATEGORIAN4, + MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN5, + MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.CATEGORIA END) AS CATEGORIAN5 + FROM consinco.MAP_FAMDIVCATEG DC + JOIN DIVISOES DI ON DI.NRODIVISAO=DC.NRODIVISAO + JOIN consinco.MAP_CATEGORIA CC ON CC.SEQCATEGORIA=DC.SEQCATEGORIA AND CC.NRODIVISAO=DC.NRODIVISAO AND CC.TIPCATEGORIA='M' AND CC.NIVELHIERARQUIA BETWEEN 2 AND 5 + AND ((CC.NIVELHIERARQUIA=2 AND CC.STATUSCATEGOR IN ('A','F') AND DC.STATUS IN ('A','F')) OR (CC.NIVELHIERARQUIA IN (3,4,5) AND CC.STATUSCATEGOR='A' AND DC.STATUS='A')) + GROUP BY DC.SEQFAMILIA, DC.NRODIVISAO + ), + NODO_EMPRESA AS (SELECT codigo, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo), + NODO_PRODUTO AS (SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase) + SELECT + SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, + Z.DTA, EXTRACT(YEAR FROM Z.DTA), EXTRACT(MONTH FROM Z.DTA), EXTRACT(DAY FROM Z.DTA), + TO_NUMBER(TO_CHAR(Z.DTA,'D')), + NP.id_nodo, NE.id_nodo, Z.NROEMPRESA, Z.NOMEEMPRESA, Z.SEQPRODUTO, Z.PRODUTO, + Z.SEQPRODUTOBASE, Z.NRODIVISAO, Z.NROSEGMENTO, + Z.QTDE_VENDA, Z.VLR_IMP_VENDA, Z.QTDE_VENDA, Z.VLRCONTRIB, + CASE WHEN Z.QTDE_VENDA>0 THEN Z.VLRVENDA/Z.QTDE_VENDA ELSE NULL END, + Z.PROPQTDPRODUTOBASE, SYSDATE, Z.DESCSEGMENTO + FROM ( + SELECT /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.4') */ + Y.DTAENTRADASAIDA AS DTA, V.NROEMPRESA, E.NOMEREDUZIDO AS NOMEEMPRESA, + V.NROSEGMENTO, seg1.descsegmento, V.NRODIVISAO, V.SEQPRODUTO, A.SEQPRODUTOBASE, + A.DESCCOMPLETA AS PRODUTO, + CC1.SEQCATEGORIA AS SEQCATEGORIAN1, CC1.CATEGORIA AS CATEGORIAN1, + C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3, + C.SEQCATEGORIAN4, C.CATEGORIAN4, C.SEQCATEGORIAN5, C.CATEGORIAN5, + SUM(V.QTDITEM-NVL(V.QTDDEVOLITEM,0)) AS QTDE_VENDA, + SUM(ROUND(V.VLRITEM,2)-ROUND(V.VLRDEVOLITEM,2)) AS VLRVENDA, + SUM(DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDITEM,0,0,(Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDITEM))-DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRDEVOLITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDDEVOLITEM,0,0,(Y.VLRIMPOSTODEVOL-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDDEVOLITEM))+DECODE(V.ACMCOMPRAVENDA,'I',0,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+V.VLRFCPICMS+V.PISITEM+V.COFINSITEM-DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)-V.DVLRFCPICMS-V.PISDEVOLITEM-V.COFINSDEVOLITEM)) AS VLR_IMP_VENDA, + SUM(consinco.fC5_AbcDistribLucratividade('L','L','N',V.VLRITEM,'N',V.VLRICMSST,V.VLRFCPST,V.VLRICMSSTEMPORIG,E.UF,V.UFPESSOA,'S',NULL,'N',V.VLRIPIITEM,V.VLRIPIDEVOLITEM,'N',V.VLRDESCFORANF,Y.CMDIAVLRNF-0,Y.CMDIAIPI,NVL(Y.CMDIACREDPIS,0),NVL(Y.CMDIACREDCOFINS,0),Y.CMDIAICMSST,Y.CMDIADESPNF,Y.CMDIADESPFORANF,Y.CMDIADCTOFORANF,'S',A.PROPQTDPRODUTOBASE,V.QTDITEM,V.VLREMBDESCRESSARCST,V.ACMCOMPRAVENDA,V.PISITEM,V.COFINSITEM,DECODE(V.TIPCGO,'S',Y.QTDVDA,NVL(Y.QTDDEVOL,Y.QTDVDA)),DECODE(V.TIPCGO,'S',Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0),NVL(Y.VLRIMPOSTODEVOL-NVL(V.VLRIPIDEVOLITEM,0),Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))),'N',V.VLRDESPOPERACIONALITEM,Y.VLRDESPESAVDA,'N',NVL(Y.VLRVERBAVDAACR,0),DECODE(V.TIPDOCFISCALCGO,'T',0,Y.QTDVERBAVDA),Y.VLRVERBAVDA-NVL(Y.VLRVERBAVDAINDEVIDA,0),'N',NVL(V.VLRTOTCOMISSAOITEM,0),V.VLRDEVOLITEM,V.VLRDEVOLICMSST,V.DVLRFCPST,V.QTDDEVOLITEM,V.PISDEVOLITEM,V.COFINSDEVOLITEM,V.VLRDESPOPERACIONALITEMDEVOL,V.VLRTOTCOMISSAOITEMDEVOL,E.PERIRLUCRAT,E.PERCSLLLUCRAT,Y.CMDIACREDICMS,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+0,V.VLRFCPICMS,V.PERCPMF,V.PEROUTROIMPOSTO,DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)+0,V.DVLRFCPICMS,CASE WHEN 'N'='N' THEN NVL(Y.CMDIAVLRDESCPISTRANSF,0)+NVL(Y.CMDIAVLRDESCCOFINSTRANSF,0)+NVL(Y.CMDIAVLRDESCICMSTRANSF,0)+NVL(Y.CMDIAVLRDESCIPITRANSF,0)+NVL(Y.CMDIAVLRDESCLUCROTRANSF,0)+NVL(Y.CMDIAVLRDESCVERBATRANSF,0) ELSE 0 END,CASE WHEN DV.UTILACRESCCUSTPRODRELAC='S' AND NVL(A.SEQPRODUTOBASE,A.SEQPRODUTOBASEANTIGO) IS NOT NULL THEN COALESCE(PR.PERCACRESCCUSTORELACVIG,NVL(consinco.F_RETACRESCCUSTORELACABC(V.SEQPRODUTO,V.DTAVDA),1)) ELSE 1 END,'N',0,0,'S',V.VLRDESCMEDALHA,'S',V.VLRDESCFORNEC,V.VLRDESCFORNECDEVOL,'N',V.VLRFRETEITEMRATEIO,V.VLRFRETEITEMRATEIODEV,'S',V.VLRICMSSTEMBUTPROD,V.VLRICMSSTEMBUTPRODDEV,V.VLREMBDESCRESSARCSTDEVOL,CASE WHEN 'N'='S' THEN NVL(V.VLRDESCACORDOVERBAPDV,0) ELSE 0 END,NVL(Y.CMDIACREDIPI,0),NVL(V.VLRITEMRATEIOCTE,0),'N','C',V.VLRIPIPRECOVDA,V.VLRIPIPRECODEVOL,V.VLRDESCMEDALHADEVOL,'N')) AS VLRCONTRIB, + CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT, + CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT, + MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE + FROM consinco.MRL_CUSTODIA Y + JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA=V.DTAVDA + JOIN CGOS CG ON CG.CODGERALOPER=V.CODGERALOPER + JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO=V.SEQPRODUTO + JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO=V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO=Y.SEQPRODUTO + JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA=A.SEQFAMILIA AND D.NRODIVISAO=V.NRODIVISAO + JOIN consinco.MAD_SEGMENTO seg1 ON seg1.NRODIVISAO=D.NRODIVISAO AND seg1.NROSEGMENTO=V.NROSEGMENTO AND seg1.STATUS='A' + JOIN DIVISOES DI ON DI.NRODIVISAO=D.NRODIVISAO + JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA=A.SEQFAMILIA AND K.QTDEMBALAGEM=1 + JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA=V.NROEMPRESA AND Y.NROEMPRESA=NVL(E.NROEMPCUSTOABC,E.NROEMPRESA) + JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO=DV.NRODIVISAO + JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO=D.NRODIVISAO AND DC.STATUS='A' AND DC.SEQFAMILIA=D.SEQFAMILIA + JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA=DC.SEQCATEGORIA AND CC1.STATUSCATEGOR IN ('A','F') AND CC1.NIVELHIERARQUIA=1 AND CC1.NRODIVISAO=DC.NRODIVISAO AND CC1.TIPCATEGORIA='M' + LEFT JOIN CATEG C ON C.SEQFAMILIA=A.SEQFAMILIA AND C.NRODIVISAO=V.NRODIVISAO + LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO=V.SEQPRODUTO AND PR.DTAMOVIMENTACAO=V.DTAVDA + WHERE V.NROEMPRESA=p_empresa AND V.DTAVDA>=p_data_inicial AND V.DTAVDA'S' AND V.ACMCOMPRAVENDA IN ('S','I'))) + GROUP BY Y.DTAENTRADASAIDA, V.NROEMPRESA, E.NOMEREDUZIDO, V.NRODIVISAO, V.NROSEGMENTO, SEG1.DESCSEGMENTO, + V.SEQPRODUTO, A.SEQPRODUTOBASE, A.SEQFAMILIA, A.DESCCOMPLETA, CC1.SEQCATEGORIA, CC1.CATEGORIA, + C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3, C.SEQCATEGORIAN4, C.CATEGORIAN4, + C.SEQCATEGORIAN5, C.CATEGORIAN5 + ) Z + JOIN NODO_EMPRESA NE ON NE.codigo=TO_CHAR(Z.NROEMPRESA) + JOIN NODO_PRODUTO NP ON NP.codigo=TO_CHAR(Z.SEQPRODUTO) AND NP.cod_empresa=Z.NROEMPRESA AND NVL(NP.seqprodutobase,-1)=NVL(Z.SEQPRODUTOBASE,-1); + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql b/migrations/C5/20260529000028_prc_flash_atualiza_contribuicao_dono.sql similarity index 56% rename from migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql rename to migrations/C5/20260529000028_prc_flash_atualiza_contribuicao_dono.sql index 8c12ae7..16445b1 100644 --- a/migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql +++ b/migrations/C5/20260529000028_prc_flash_atualiza_contribuicao_dono.sql @@ -3,8 +3,9 @@ CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO ( p_data_inicial IN DATE, p_data_final IN DATE, - p_empresa_ini IN NUMBER DEFAULT NULL, - p_empresa_fim IN NUMBER DEFAULT NULL + p_empresas IN VARCHAR2 DEFAULT NULL, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL ) AS v_inicio_execucao DATE := SYSDATE; BEGIN @@ -12,51 +13,40 @@ BEGIN DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); FOR r IN ( - SELECT codigo - FROM vitruvio.vi_lojas - WHERE codigo NOT IN (301, 401, 500) - AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini) - AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim) - ORDER BY codigo + SELECT CODIGO_EXTERNO AS CODIGO + FROM vitruvio.vi_lojas V + WHERE p_empresas IS NULL + OR CODIGO_EXTERNO IN ( + SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) + FROM dual + CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL + ) + ORDER BY CODIGO_EXTERNO ) LOOP BEGIN DBMS_OUTPUT.PUT_LINE('Carregando contribuição da empresa: ' || r.codigo); - PRC_FLASH_CARGA_DADOS_CONTRIBUICAO( p_data_inicial => p_data_inicial, p_data_final => p_data_final, - p_empresa => r.codigo + p_empresa => r.codigo, + p_divisao => p_divisao, + p_cgos => p_cgos ); - EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE( - 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM - ); + DBMS_OUTPUT.PUT_LINE('Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM); RAISE; END; END LOOP; DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de contribuição...'); - - PRC_FLASH_CARGA_META_CONTRIBUICAO_STG( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_CONTRIBUICAO_STG(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Carregando metas finais de contribuição...'); - - PRC_FLASH_CARGA_META_CONTRIBUICAO( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_CONTRIBUICAO(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Atualizando resumo de contribuição...'); - - PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); @@ -73,10 +63,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE'; IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO'; + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO'; END IF; END; -- +goose StatementEnd - \ No newline at end of file diff --git a/migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql b/migrations/C5/20260529000029_seq_tb_flash_fato_perda.sql similarity index 100% rename from migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql rename to migrations/C5/20260529000029_seq_tb_flash_fato_perda.sql diff --git a/migrations/C5/20260520000002_tb_flash_fato_perda.sql b/migrations/C5/20260529000030_tb_flash_fato_perda.sql similarity index 60% rename from migrations/C5/20260520000002_tb_flash_fato_perda.sql rename to migrations/C5/20260529000030_tb_flash_fato_perda.sql index 8cf4dfa..30dd88c 100644 --- a/migrations/C5/20260520000002_tb_flash_fato_perda.sql +++ b/migrations/C5/20260529000030_tb_flash_fato_perda.sql @@ -7,35 +7,55 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_FATO_PERDA ( - ID_FATO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2), - DIA_SEMANA NUMBER(2), - ID_NODO NUMBER NOT NULL, - ID_NODO_EMPRESA NUMBER NOT NULL, - COD_EMPRESA NUMBER NOT NULL, - NOME_EMPRESA VARCHAR2(200), - COD_PRODUTO NUMBER NOT NULL, - DESCRICAO_PRODUTO VARCHAR2(300), - SEQPRODUTOBASE NUMBER, - NRODIVISAO NUMBER, - NROSEGMENTO NUMBER, - VLR_CUSTO_PERDA NUMBER(18,6), - QTDE_PERDA NUMBER(18,6), - VLR_PERDA NUMBER(18,6), - PROPQTDPRODUTOBASE NUMBER(18,6), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + ID_FATO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0), + DIA_SEMANA NUMBER(2,0), + ID_NODO NUMBER NOT NULL, + ID_NODO_EMPRESA NUMBER NOT NULL, + COD_EMPRESA NUMBER NOT NULL, + NOME_EMPRESA VARCHAR2(200), + COD_PRODUTO NUMBER NOT NULL, + DESCRICAO_PRODUTO VARCHAR2(300), + SEQPRODUTOBASE NUMBER, + NRODIVISAO NUMBER, + NROSEGMENTO NUMBER, + VLR_CUSTO_PERDA NUMBER(18,6), + QTDE_PERDA NUMBER(18,6), + VLR_PERDA NUMBER(18,6), + PROPQTDPRODUTOBASE NUMBER(18,6), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + NOME_SEGMENTO VARCHAR2(300), + CONSTRAINT CK_TB_FLASH_FATO_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), CONSTRAINT PK_TB_FLASH_FATO_PERDA PRIMARY KEY (ID_FATO), - CONSTRAINT FK_TB_FLASH_FATO_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT FK_TB_FLASH_FATO_PERDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO), - CONSTRAINT CK_TB_FLASH_FATO_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12) + CONSTRAINT UK_TB_FLASH_FATO_PERDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO) )'; END IF; END; -- +goose StatementEnd -- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT FK_TB_FLASH_FATO_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_PERDA_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT FK_TB_FLASH_FATO_PERDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin DECLARE v_count NUMBER; BEGIN @@ -85,16 +105,6 @@ BEGIN END IF; END; -- +goose StatementEnd --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_PERDA'; - IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT UK_TB_FLASH_FATO_PERDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)'; - END IF; -END; --- +goose StatementEnd -- +goose Down -- +goose StatementBegin diff --git a/migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql b/migrations/C5/20260529000031_seq_tb_flash_meta_perda.sql similarity index 100% rename from migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql rename to migrations/C5/20260529000031_seq_tb_flash_meta_perda.sql diff --git a/migrations/C5/20260520000004_tb_flash_meta_perda.sql b/migrations/C5/20260529000032_tb_flash_meta_perda.sql similarity index 70% rename from migrations/C5/20260520000004_tb_flash_meta_perda.sql rename to migrations/C5/20260529000032_tb_flash_meta_perda.sql index f235662..0e83ef5 100644 --- a/migrations/C5/20260520000004_tb_flash_meta_perda.sql +++ b/migrations/C5/20260529000032_tb_flash_meta_perda.sql @@ -7,21 +7,21 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_PERDA ( - ID_META NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, - DATA_ATUALIZACAO DATE, - CONSTRAINT PK_TB_FLASH_META_PERDA PRIMARY KEY (ID_META), - CONSTRAINT FK_TB_FLASH_META_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_META NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + DATA_ATUALIZACAO DATE, CONSTRAINT CK_TB_FLASH_META_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_META_PERDA PRIMARY KEY (ID_META), + CONSTRAINT UK_TB_FLASH_META_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA) )'; END IF; END; @@ -30,9 +30,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_META_PERDA'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_META_PERDA_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_PERDA ADD CONSTRAINT UK_TB_FLASH_META_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_PERDA ADD CONSTRAINT FK_TB_FLASH_META_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql b/migrations/C5/20260529000033_tb_flash_meta_perda_stg.sql similarity index 66% rename from migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql rename to migrations/C5/20260529000033_tb_flash_meta_perda_stg.sql index 4526b51..fdedd4b 100644 --- a/migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql +++ b/migrations/C5/20260529000033_tb_flash_meta_perda_stg.sql @@ -7,24 +7,24 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_META_PERDA_STG ( - COD_EMPRESA NUMBER NOT NULL, - TIPO_NODO VARCHAR2(30) NOT NULL, - CODIGO_NODO VARCHAR2(60) NOT NULL, - CODIGO_NODO_PAI VARCHAR2(60), - TIPO_NODO_PAI VARCHAR2(30), - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - PERCENTUAL_META NUMBER(10,4), - VALOR_META NUMBER(18,6), - OBSERVACAO VARCHAR2(500), - ORIGEM_META VARCHAR2(100), - DATA_CARGA DATE DEFAULT SYSDATE, + COD_EMPRESA NUMBER NOT NULL, + TIPO_NODO VARCHAR2(30) NOT NULL, + CODIGO_NODO VARCHAR2(60) NOT NULL, + CODIGO_NODO_PAI VARCHAR2(60), + TIPO_NODO_PAI VARCHAR2(30), + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + ORIGEM_META VARCHAR2(100), + DATA_CARGA DATE DEFAULT SYSDATE, CONSTRAINT CK_TB_FLASH_META_PRD_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), CONSTRAINT CK_TB_FLASH_META_PRD_STG_TPAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL), - CONSTRAINT CK_TB_FLASH_META_PRD_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_META_PRD_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_META_PRD_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), + CONSTRAINT CK_TB_FLASH_META_PRD_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) )'; END IF; END; diff --git a/migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql b/migrations/C5/20260529000034_vw_flash_meta_perda_stg.sql similarity index 50% rename from migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql rename to migrations/C5/20260529000034_vw_flash_meta_perda_stg.sql index f831bef..38d6553 100644 --- a/migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql +++ b/migrations/C5/20260529000034_vw_flash_meta_perda_stg.sql @@ -2,17 +2,17 @@ -- +goose StatementBegin CREATE OR REPLACE VIEW VW_FLASH_META_PERDA_STG AS SELECT - CAST(NULL AS NUMBER) AS cod_empresa, - CAST(NULL AS VARCHAR2(30)) AS tipo_nodo, - CAST(NULL AS VARCHAR2(60)) AS codigo_nodo, - CAST(NULL AS VARCHAR2(60)) AS codigo_nodo_pai, - CAST(NULL AS VARCHAR2(30)) AS tipo_nodo_pai, - CAST(NULL AS DATE) AS data_referencia, - CAST(NULL AS NUMBER(4)) AS ano_referencia, - CAST(NULL AS NUMBER(2)) AS mes_referencia, - CAST(NULL AS NUMBER(2)) AS dia_referencia, - CAST(NULL AS NUMBER(10,4)) AS percentual_meta, - CAST(NULL AS NUMBER(18,6)) AS valor_meta, + CAST(NULL AS NUMBER) AS cod_empresa, + CAST(NULL AS VARCHAR2(30)) AS tipo_nodo, + CAST(NULL AS VARCHAR2(60)) AS codigo_nodo, + CAST(NULL AS VARCHAR2(60)) AS codigo_nodo_pai, + CAST(NULL AS VARCHAR2(30)) AS tipo_nodo_pai, + CAST(NULL AS DATE) AS data_referencia, + CAST(NULL AS NUMBER(4)) AS ano_referencia, + CAST(NULL AS NUMBER(2)) AS mes_referencia, + CAST(NULL AS NUMBER(2)) AS dia_referencia, + CAST(NULL AS NUMBER(10,4)) AS percentual_meta, + CAST(NULL AS NUMBER(18,6)) AS valor_meta, CAST(NULL AS VARCHAR2(500)) AS observacao, CAST(NULL AS VARCHAR2(100)) AS origem_meta FROM dual diff --git a/migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql b/migrations/C5/20260529000035_seq_tb_flash_nodo_resumo_perda.sql similarity index 100% rename from migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql rename to migrations/C5/20260529000035_seq_tb_flash_nodo_resumo_perda.sql diff --git a/migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql b/migrations/C5/20260529000036_tb_flash_nodo_resumo_perda.sql similarity index 62% rename from migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql rename to migrations/C5/20260529000036_tb_flash_nodo_resumo_perda.sql index 1fc567d..d2a7bf5 100644 --- a/migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql +++ b/migrations/C5/20260529000036_tb_flash_nodo_resumo_perda.sql @@ -7,26 +7,28 @@ BEGIN IF v_count = 0 THEN EXECUTE IMMEDIATE ' CREATE TABLE TB_FLASH_NODO_RESUMO_PERDA ( - ID_RESUMO NUMBER NOT NULL, - ID_NODO NUMBER NOT NULL, - DATA_REFERENCIA DATE NOT NULL, - ANO_REFERENCIA NUMBER(4) NOT NULL, - MES_REFERENCIA NUMBER(2) NOT NULL, - DIA_REFERENCIA NUMBER(2) NOT NULL, - VALOR_VENDA NUMBER(18,6), - VALOR_META_PROPRIA NUMBER(18,6), - VALOR_META_FILHOS NUMBER(18,6), - VALOR_META_EFETIVA NUMBER(18,6), - PERCENTUAL_META_PROPRIA NUMBER(10,4), - PERCENTUAL_META_FILHOS NUMBER(10,4), - PERCENTUAL_META_EFETIVA NUMBER(10,4), - DESVIO NUMBER(18,6), - PERCENTUAL_ATINGIMENTO NUMBER(18,6), - DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, - CONSTRAINT PK_TB_FLASH_NODO_RES_PERDA PRIMARY KEY (ID_RESUMO), - CONSTRAINT FK_TB_FLASH_NODO_RES_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + ID_RESUMO NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4,0) NOT NULL, + MES_REFERENCIA NUMBER(2,0) NOT NULL, + DIA_REFERENCIA NUMBER(2,0) NOT NULL, + VALOR_VENDA NUMBER(18,6), + VALOR_META_PROPRIA NUMBER(18,6), + VALOR_META_FILHOS NUMBER(18,6), + VALOR_META_EFETIVA NUMBER(18,6), + PERCENTUAL_META_PROPRIA NUMBER(10,4), + PERCENTUAL_META_FILHOS NUMBER(10,4), + PERCENTUAL_META_EFETIVA NUMBER(10,4), + DESVIO NUMBER(18,6), + PERCENTUAL_ATINGIMENTO NUMBER(18,6), + DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, + NRO_SEGMENTO NUMBER(24,0), + NOME_SEGMENTO VARCHAR2(300), CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), - CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31), + CONSTRAINT PK_TB_FLASH_NODO_RES_PERDA PRIMARY KEY (ID_RESUMO), + CONSTRAINT UK_TB_FLASH_NODO_RES_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA) )'; END IF; END; @@ -35,9 +37,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_PERDA'; + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_PERDA_NODO'; IF v_count = 0 THEN - EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_PERDA ADD CONSTRAINT UK_TB_FLASH_NODO_RES_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA)'; + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_PERDA ADD CONSTRAINT FK_TB_FLASH_NODO_RES_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)'; END IF; END; -- +goose StatementEnd diff --git a/migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql b/migrations/C5/20260529000037_prc_flash_carga_meta_perda_stg.sql similarity index 94% rename from migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql rename to migrations/C5/20260529000037_prc_flash_carga_meta_perda_stg.sql index e95bfb8..44a6e66 100644 --- a/migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql +++ b/migrations/C5/20260529000037_prc_flash_carga_meta_perda_stg.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_PERDA_STG ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql b/migrations/C5/20260529000038_prc_flash_carga_meta_perda.sql similarity index 98% rename from migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql rename to migrations/C5/20260529000038_prc_flash_carga_meta_perda.sql index bc6420d..f3b0282 100644 --- a/migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql +++ b/migrations/C5/20260529000038_prc_flash_carga_meta_perda.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_PERDA ( p_data_inicial IN DATE, p_data_final IN DATE ) AS diff --git a/migrations/C5/20260529000039_prc_flash_carga_resumo_perda.sql b/migrations/C5/20260529000039_prc_flash_carga_resumo_perda.sql new file mode 100644 index 0000000..5e1753c --- /dev/null +++ b/migrations/C5/20260529000039_prc_flash_carga_resumo_perda.sql @@ -0,0 +1,124 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_PERDA ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS + v_dt_ini DATE := TRUNC(p_data_inicial); + v_dt_fim DATE := TRUNC(p_data_final) + 1; +BEGIN + DELETE FROM TB_FLASH_NODO_RESUMO_PERDA + WHERE data_referencia >= v_dt_ini + AND data_referencia < v_dt_fim; + + INSERT /*+ APPEND */ INTO TB_FLASH_NODO_RESUMO_PERDA ( + id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, + percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, + desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento + ) + WITH + hierarquia AS ( + SELECT /*+ MATERIALIZE */ + CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, + n.id_nodo AS id_nodo_descendente + FROM TB_FLASH_NODO n + CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai + ), + venda_direta AS ( + SELECT f.id_nodo, + TRUNC(f.data_referencia) AS data_referencia, + EXTRACT(YEAR FROM TRUNC(f.data_referencia)) AS ano_referencia, + EXTRACT(MONTH FROM TRUNC(f.data_referencia)) AS mes_referencia, + EXTRACT(DAY FROM TRUNC(f.data_referencia)) AS dia_referencia, + SUM(f.vlr_perda) AS valor_venda, + MAX(f.nrosegmento) AS nro_segmento, + MAX(f.nome_segmento) AS nome_segmento + FROM TB_FLASH_FATO_PERDA f + WHERE f.data_referencia >= v_dt_ini + AND f.data_referencia < v_dt_fim + GROUP BY f.id_nodo, TRUNC(f.data_referencia) + ), + venda_hierarquia AS ( + SELECT h.id_nodo_ancestral AS id_nodo, + vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia, + SUM(vd.valor_venda) AS valor_venda + FROM hierarquia h + JOIN venda_direta vd ON vd.id_nodo = h.id_nodo_descendente + GROUP BY h.id_nodo_ancestral, vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia + ), + meta_propria_diaria AS ( + SELECT /*+ MATERIALIZE */ + m.id_nodo, + TRUNC(m.data_referencia) AS data_referencia, + EXTRACT(YEAR FROM TRUNC(m.data_referencia)) AS ano_referencia, + EXTRACT(MONTH FROM TRUNC(m.data_referencia)) AS mes_referencia, + EXTRACT(DAY FROM TRUNC(m.data_referencia)) AS dia_referencia, + MAX(m.percentual_meta) AS percentual_meta_propria, + SUM(m.valor_meta) AS valor_meta_propria + FROM TB_FLASH_META_PERDA m + WHERE m.data_referencia >= v_dt_ini + AND m.data_referencia < v_dt_fim + GROUP BY m.id_nodo, TRUNC(m.data_referencia) + ), + meta_filhos_diaria AS ( + SELECT pai.id_nodo, + mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, + SUM(mpd.valor_meta_propria) AS valor_meta_filhos + FROM TB_FLASH_NODO pai + JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo + JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo + GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia + ), + combinado AS ( + SELECT + COALESCE(vh.id_nodo, mpd.id_nodo, mfd.id_nodo) AS id_nodo, + COALESCE(vh.data_referencia, mpd.data_referencia, mfd.data_referencia) AS data_referencia, + COALESCE(vh.ano_referencia, mpd.ano_referencia, mfd.ano_referencia) AS ano_referencia, + COALESCE(vh.mes_referencia, mpd.mes_referencia, mfd.mes_referencia) AS mes_referencia, + COALESCE(vh.dia_referencia, mpd.dia_referencia, mfd.dia_referencia) AS dia_referencia, + NVL(vh.valor_venda, 0) AS valor_venda, + mpd.valor_meta_propria, + mpd.percentual_meta_propria, + mfd.valor_meta_filhos, + CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva + FROM venda_hierarquia vh + FULL OUTER JOIN meta_propria_diaria mpd + ON mpd.id_nodo = vh.id_nodo + AND mpd.data_referencia = vh.data_referencia + FULL OUTER JOIN meta_filhos_diaria mfd + ON mfd.id_nodo = COALESCE(vh.id_nodo, mpd.id_nodo) + AND mfd.data_referencia = COALESCE(vh.data_referencia, mpd.data_referencia) + ) + SELECT SEQ_TB_FLASH_NODO_RESUMO_PERDA.NEXTVAL, + c.id_nodo, c.data_referencia, c.ano_referencia, c.mes_referencia, c.dia_referencia, + c.valor_venda, + c.valor_meta_propria, + c.valor_meta_filhos, + c.valor_meta_efetiva, + c.percentual_meta_propria, + CAST(NULL AS NUMBER(10,4)) AS percentual_meta_filhos, + c.percentual_meta_propria AS percentual_meta_efetiva, + c.valor_venda - NVL(c.valor_meta_efetiva, 0) AS desvio, + CASE WHEN NVL(c.valor_meta_efetiva, 0) = 0 THEN NULL ELSE c.valor_venda / c.valor_meta_efetiva * 100 END AS percentual_atingimento, + SYSDATE, + vd.nro_segmento, + vd.nome_segmento + FROM combinado c + LEFT JOIN venda_direta vd ON vd.id_nodo = c.id_nodo AND vd.data_referencia = c.data_referencia; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_PERDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260529000040_prc_flash_carga_dados_perda.sql b/migrations/C5/20260529000040_prc_flash_carga_dados_perda.sql new file mode 100644 index 0000000..744b8ad --- /dev/null +++ b/migrations/C5/20260529000040_prc_flash_carga_dados_perda.sql @@ -0,0 +1,76 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL +) AS +BEGIN + DELETE FROM TB_FLASH_FATO_PERDA + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + INSERT INTO TB_FLASH_FATO_PERDA ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, qtde_perda, vlr_perda, + propqtdprodutobase, data_cadastro, nome_segmento + ) + SELECT + SEQ_TB_FLASH_FATO_PERDA.NEXTVAL, + x.data_referencia, x.ano_referencia, x.mes_referencia, x.dia_referencia, x.dia_semana, + x.id_nodo, x.id_nodo_empresa, x.cod_empresa, x.nome_empresa, + x.cod_produto, x.descricao_produto, x.seqprodutobase, x.nrodivisao, x.nrosegmento, + x.qtde_perda, x.vlr_perda, x.propqtdprodutobase, x.data_cadastro, x.nome_segmento + FROM ( + SELECT + TRUNC(a.DTAVDA) AS data_referencia, + EXTRACT(YEAR FROM a.DTAVDA) AS ano_referencia, + EXTRACT(MONTH FROM a.DTAVDA) AS mes_referencia, + EXTRACT(DAY FROM a.DTAVDA) AS dia_referencia, + TO_NUMBER(TO_CHAR(a.DTAVDA,'D')) AS dia_semana, + MIN(b.id_nodo) AS id_nodo, + MIN(c.id_nodo) AS id_nodo_empresa, + b.cod_empresa AS cod_empresa, + MAX(d.fantasia) AS nome_empresa, + a.seqproduto AS cod_produto, + MAX(e.descreduzida) AS descricao_produto, + MAX(e.seqprodutobase) AS seqprodutobase, + MIN(a.nrodivisao) AS nrodivisao, + a.nrosegmento AS nrosegmento, + SUM(a.qtditem) AS qtde_perda, + SUM(a.vlritem) AS vlr_perda, + MAX(e.propqtdprodutobase) AS propqtdprodutobase, + SYSDATE AS data_cadastro, + MAX(seg1.descsegmento) AS nome_segmento + FROM consinco.maxv_abcdistribbase a + INNER JOIN vitruvio.TB_FLASH_NODO b ON b.tipo_nodo = 'PRODUTO' AND b.cod_empresa = a.nroempresa AND b.cod_produto = a.seqproduto + INNER JOIN vitruvio.TB_FLASH_NODO c ON c.tipo_nodo = 'EMPRESA' AND c.cod_empresa = a.nroempresa + INNER JOIN consinco.max_empresa d ON d.nroempresa = c.cod_empresa + INNER JOIN consinco.map_produto e ON e.seqproduto = a.seqproduto + INNER JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = a.nrodivisao AND seg1.nrosegmento = a.nrosegmento + WHERE a.nroempresa = p_empresa + AND a.dtavda BETWEEN p_data_inicial AND p_data_final + AND (p_cgos IS NULL OR a.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL)) + AND (p_divisao IS NULL OR a.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL)) + GROUP BY TRUNC(a.dtavda), EXTRACT(YEAR FROM a.dtavda), EXTRACT(MONTH FROM a.dtavda), + EXTRACT(DAY FROM a.dtavda), TO_NUMBER(TO_CHAR(a.dtavda,'D')), b.cod_empresa, a.seqproduto, a.nrosegmento + ) x; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql b/migrations/C5/20260529000041_prc_flash_atualiza_perda_dono.sql similarity index 55% rename from migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql rename to migrations/C5/20260529000041_prc_flash_atualiza_perda_dono.sql index a01077a..d7606f2 100644 --- a/migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql +++ b/migrations/C5/20260529000041_prc_flash_atualiza_perda_dono.sql @@ -3,8 +3,9 @@ CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO ( p_data_inicial IN DATE, p_data_final IN DATE, - p_empresa_ini IN NUMBER DEFAULT NULL, - p_empresa_fim IN NUMBER DEFAULT NULL + p_empresas IN VARCHAR2 DEFAULT NULL, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL ) AS v_inicio_execucao DATE := SYSDATE; BEGIN @@ -12,51 +13,40 @@ BEGIN DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); FOR r IN ( - SELECT codigo - FROM vitruvio.vi_lojas - WHERE codigo NOT IN (301, 401, 500) - AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini) - AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim) - ORDER BY codigo + SELECT CODIGO_EXTERNO AS CODIGO + FROM vitruvio.vi_lojas V + WHERE p_empresas IS NULL + OR CODIGO_EXTERNO IN ( + SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) + FROM dual + CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL + ) + ORDER BY CODIGO_EXTERNO ) LOOP BEGIN DBMS_OUTPUT.PUT_LINE('Carregando perda da empresa: ' || r.codigo); - PRC_FLASH_CARGA_DADOS_PERDA( p_data_inicial => p_data_inicial, p_data_final => p_data_final, - p_empresa => r.codigo + p_empresa => r.codigo, + p_divisao => p_divisao, + p_cgos => p_cgos ); - EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE( - 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM - ); + DBMS_OUTPUT.PUT_LINE('Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM); RAISE; END; END LOOP; DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de perda...'); - - PRC_FLASH_CARGA_META_PERDA_STG( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_PERDA_STG(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Carregando metas finais de perda...'); - - PRC_FLASH_CARGA_META_PERDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_META_PERDA(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('Atualizando resumo de perda...'); - - PRC_FLASH_CARGA_RESUMO_PERDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); + PRC_FLASH_CARGA_RESUMO_PERDA(p_data_inicial => p_data_inicial, p_data_final => p_data_final); DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_PERDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); @@ -73,9 +63,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_PERDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_PERDA_DONO' AND object_type = 'PROCEDURE'; IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO'; + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_PERDA_DONO'; END IF; END; -- +goose StatementEnd