From 6acc92dfe2145252184fa7b4a13a4a87c023871f Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 20 May 2026 16:27:57 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=B5es=20e=20cria=C3=A7=C3=A3o?= =?UTF-8?q?=20das=20tabelas=20para=20o=20ambiente=20do=20Barcelos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../C5/20260430000001_seq_tb_flash_nodo.sql | 23 + .../C5/20260430000002_tb_flash_nodo.sql | 93 ++ ...20260430000003_seq_tb_flash_fato_venda.sql | 23 + .../C5/20260430000004_tb_flash_fato_venda.sql | 111 +++ ...20260430000005_seq_tb_flash_meta_venda.sql | 23 + .../C5/20260430000006_tb_flash_meta_venda.sql | 80 ++ ...20260430000007_tb_flash_meta_venda_stg.sql | 73 ++ ...20260430000008_vw_flash_meta_venda_stg.sql | 33 + ...0000009_seq_tb_flash_nodo_resumo_venda.sql | 23 + ...60430000010_tb_flash_nodo_resumo_venda.sql | 85 ++ ...0000011_prc_flash_carga_meta_venda_stg.sql | 36 + ...60430000012_prc_flash_carga_meta_venda.sql | 109 +++ ...430000013_prc_flash_carga_resumo_venda.sql | 107 +++ ...30000014_prc_flash_atualiza_venda_dono.sql | 81 ++ ...0430000015_prc_flash_carga_dados_venda.sql | 227 +++++ ...7000001_seq_tb_flash_fato_contribuicao.sql | 24 + ...60507000002_tb_flash_fato_contribuicao.sql | 112 +++ ..._seq_tb_flash_nodo_resumo_contribuicao.sql | 24 + ...0010_tb_flash_nodo_resumo_contribuicao.sql | 90 ++ ...11_prc_flash_carga_resumo_contribuicao.sql | 119 +++ ...2_prc_flash_atualiza_contribuicao_dono.sql | 82 ++ ...013_prc_flash_carga_dados_contribuicao.sql | 444 +++++++++ ...7000014_tb_flash_meta_contribuicao_stg.sql | 74 ++ ...7000015_vw_flash_meta_contribuicao_stg.sql | 34 + ...7000016_seq_tb_flash_meta_contribuicao.sql | 23 + ...60507000017_tb_flash_meta_contribuicao.sql | 80 ++ ...001_prc_flash_carga_dados_contribuicao.sql | 866 +++++++++++++++++ ..._prc_flash_carga_meta_contribuicao_stg.sql | 36 + ...0003_prc_flash_carga_meta_contribuicao.sql | 109 +++ ...004_prc_flash_carga_dados_contribuicao.sql | 867 ++++++++++++++++++ ...20260520000001_seq_tb_flash_fato_perda.sql | 23 + .../C5/20260520000002_tb_flash_fato_perda.sql | 109 +++ ...20260520000003_seq_tb_flash_meta_perda.sql | 23 + .../C5/20260520000004_tb_flash_meta_perda.sql | 80 ++ ...20260520000005_tb_flash_meta_perda_stg.sql | 73 ++ ...20260520000006_vw_flash_meta_perda_stg.sql | 32 + ...0000007_seq_tb_flash_nodo_resumo_perda.sql | 23 + ...60520000008_tb_flash_nodo_resumo_perda.sql | 85 ++ ...0000009_prc_flash_carga_meta_perda_stg.sql | 36 + ...60520000010_prc_flash_carga_meta_perda.sql | 109 +++ ...520000011_prc_flash_carga_resumo_perda.sql | 107 +++ ...20000012_prc_flash_atualiza_perda_dono.sql | 81 ++ ...0520000013_prc_flash_carga_dados_perda.sql | 186 ++++ ...20260520000001_seq_tb_flash_fato_perda.sql | 23 + .../20260520000002_tb_flash_fato_perda.sql | 109 +++ ...20260520000003_seq_tb_flash_meta_perda.sql | 23 + .../20260520000004_tb_flash_meta_perda.sql | 80 ++ ...20260520000005_tb_flash_meta_perda_stg.sql | 73 ++ ...20260520000006_vw_flash_meta_perda_stg.sql | 32 + ...0000007_seq_tb_flash_nodo_resumo_perda.sql | 23 + ...60520000008_tb_flash_nodo_resumo_perda.sql | 85 ++ ...0000009_prc_flash_carga_meta_perda_stg.sql | 36 + ...60520000010_prc_flash_carga_meta_perda.sql | 109 +++ ...520000011_prc_flash_carga_resumo_perda.sql | 107 +++ ...20000012_prc_flash_atualiza_perda_dono.sql | 81 ++ ...0520000013_prc_flash_carga_dados_perda.sql | 186 ++++ 56 files changed, 6045 insertions(+) create mode 100644 migrations/C5/20260430000001_seq_tb_flash_nodo.sql create mode 100644 migrations/C5/20260430000002_tb_flash_nodo.sql create mode 100644 migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql create mode 100644 migrations/C5/20260430000004_tb_flash_fato_venda.sql create mode 100644 migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql create mode 100644 migrations/C5/20260430000006_tb_flash_meta_venda.sql create mode 100644 migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql create mode 100644 migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql create mode 100644 migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql create mode 100644 migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql create mode 100644 migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql create mode 100644 migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql create mode 100644 migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql create mode 100644 migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql create mode 100644 migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql create mode 100644 migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql create mode 100644 migrations/C5/20260507000002_tb_flash_fato_contribuicao.sql create mode 100644 migrations/C5/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql create mode 100644 migrations/C5/20260507000010_tb_flash_nodo_resumo_contribuicao.sql create mode 100644 migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql create mode 100644 migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql create mode 100644 migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql create mode 100644 migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql create mode 100644 migrations/C5/20260507000015_vw_flash_meta_contribuicao_stg.sql create mode 100644 migrations/C5/20260507000016_seq_tb_flash_meta_contribuicao.sql create mode 100644 migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql create mode 100644 migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql create mode 100644 migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql create mode 100644 migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql create mode 100644 migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql create mode 100644 migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql create mode 100644 migrations/C5/20260520000002_tb_flash_fato_perda.sql create mode 100644 migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql create mode 100644 migrations/C5/20260520000004_tb_flash_meta_perda.sql create mode 100644 migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql create mode 100644 migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql create mode 100644 migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql create mode 100644 migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql create mode 100644 migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql create mode 100644 migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql create mode 100644 migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql create mode 100644 migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql create mode 100644 migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql create mode 100644 migrations/C5_big/20260520000001_seq_tb_flash_fato_perda.sql create mode 100644 migrations/C5_big/20260520000002_tb_flash_fato_perda.sql create mode 100644 migrations/C5_big/20260520000003_seq_tb_flash_meta_perda.sql create mode 100644 migrations/C5_big/20260520000004_tb_flash_meta_perda.sql create mode 100644 migrations/C5_big/20260520000005_tb_flash_meta_perda_stg.sql create mode 100644 migrations/C5_big/20260520000006_vw_flash_meta_perda_stg.sql create mode 100644 migrations/C5_big/20260520000007_seq_tb_flash_nodo_resumo_perda.sql create mode 100644 migrations/C5_big/20260520000008_tb_flash_nodo_resumo_perda.sql create mode 100644 migrations/C5_big/20260520000009_prc_flash_carga_meta_perda_stg.sql create mode 100644 migrations/C5_big/20260520000010_prc_flash_carga_meta_perda.sql create mode 100644 migrations/C5_big/20260520000011_prc_flash_carga_resumo_perda.sql create mode 100644 migrations/C5_big/20260520000012_prc_flash_atualiza_perda_dono.sql create mode 100644 migrations/C5_big/20260520000013_prc_flash_carga_dados_perda.sql diff --git a/migrations/C5/20260430000001_seq_tb_flash_nodo.sql b/migrations/C5/20260430000001_seq_tb_flash_nodo.sql new file mode 100644 index 0000000..de6517f --- /dev/null +++ b/migrations/C5/20260430000001_seq_tb_flash_nodo.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000002_tb_flash_nodo.sql b/migrations/C5/20260430000002_tb_flash_nodo.sql new file mode 100644 index 0000000..0bd5ea7 --- /dev/null +++ b/migrations/C5/20260430000002_tb_flash_nodo.sql @@ -0,0 +1,93 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO'; + 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'')), + CONSTRAINT CK_TB_FLASH_NODO_ATIVO CHECK (ATIVO IN (''S'', ''N'')), + CONSTRAINT CK_TB_FLASH_NODO_NIVEL CHECK (NIVEL >= 1) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_PAI'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_PAI ON TB_FLASH_NODO (ID_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_TIPO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_TIPO ON TB_FLASH_NODO (TIPO_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_EMPRESA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_EMPRESA ON TB_FLASH_NODO (COD_EMPRESA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_PRODUTO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_PRODUTO ON TB_FLASH_NODO (COD_PRODUTO)'; + 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_NODO_PAI_TIPO_COD'; + 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)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql b/migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql new file mode 100644 index 0000000..ff001e9 --- /dev/null +++ b/migrations/C5/20260430000003_seq_tb_flash_fato_venda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_VENDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_VENDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000004_tb_flash_fato_venda.sql b/migrations/C5/20260430000004_tb_flash_fato_venda.sql new file mode 100644 index 0000000..2e261f5 --- /dev/null +++ b/migrations/C5/20260430000004_tb_flash_fato_venda.sql @@ -0,0 +1,111 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_VENDA'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_DATA ON TB_FLASH_FATO_VENDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_ANOMES'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_ANOMES ON TB_FLASH_FATO_VENDA (ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_NODO ON TB_FLASH_FATO_VENDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_EMP ON TB_FLASH_FATO_VENDA (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_VENDA_PROD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_VENDA_PROD ON TB_FLASH_FATO_VENDA (COD_PRODUTO)'; + 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_VENDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_VENDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql b/migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql new file mode 100644 index 0000000..959b3a6 --- /dev/null +++ b/migrations/C5/20260430000005_seq_tb_flash_meta_venda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_VENDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_META_VENDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_META_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000006_tb_flash_meta_venda.sql b/migrations/C5/20260430000006_tb_flash_meta_venda.sql new file mode 100644 index 0000000..8a99020 --- /dev/null +++ b/migrations/C5/20260430000006_tb_flash_meta_venda.sql @@ -0,0 +1,80 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_VENDA'; + 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), + 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) + )'; + 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_META_VENDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VENDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VENDA_NODO ON TB_FLASH_META_VENDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VENDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VENDA_DATA ON TB_FLASH_META_VENDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VENDA_ANOMESDIA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VENDA_ANOMESDIA ON TB_FLASH_META_VENDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_VENDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql b/migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql new file mode 100644 index 0000000..78144c6 --- /dev/null +++ b/migrations/C5/20260430000007_tb_flash_meta_venda_stg.sql @@ -0,0 +1,73 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_VENDA_STG'; + 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'')), + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VDA_STG_01'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VDA_STG_01 ON TB_FLASH_META_VENDA_STG (COD_EMPRESA, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VDA_STG_02'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VDA_STG_02 ON TB_FLASH_META_VENDA_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_VDA_STG_03'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_VDA_STG_03 ON TB_FLASH_META_VENDA_STG (ORIGEM_META)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_VENDA_STG'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_VENDA_STG CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql b/migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql new file mode 100644 index 0000000..68cd596 --- /dev/null +++ b/migrations/C5/20260430000008_vw_flash_meta_venda_stg.sql @@ -0,0 +1,33 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE VIEW VW_FLASH_META_VENDA_STG AS +SELECT m1.empresa_fk AS cod_empresa, 'CATEGORIA' AS tipo_nodo, TO_CHAR(m1.categoria_fk) AS codigo_nodo, + TO_CHAR(m1.categoria_pai_fk) AS codigo_nodo_pai, 'CATEGORIA' AS tipo_nodo_pai, + m1.data_referencia, m1.ano AS ano_referencia, m1.mes AS mes_referencia, m1.dia AS dia_referencia, + m1.percentual AS percentual_meta, m1.valor_meta, 'TB_METAS_CATN1' AS observacao, 'TB_METAS_CATN1' AS origem_meta +FROM vitruvio.tb_metas_catn1 m1 +UNION ALL +SELECT m2.empresa_fk, 'CATEGORIA', TO_CHAR(m2.categoria_fk), TO_CHAR(m2.categoria_pai_fk), 'CATEGORIA', + m2.data_referencia, m2.ano, m2.mes, m2.dia, m2.percentual, m2.valor_meta, 'TB_METAS_CATN2', 'TB_METAS_CATN2' +FROM vitruvio.tb_metas_catn2 m2 +UNION ALL +SELECT m3.empresa_fk, 'CATEGORIA', TO_CHAR(m3.categoria_fk), TO_CHAR(m3.categoria_pai_fk), 'CATEGORIA', + m3.data_referencia, m3.ano, m3.mes, m3.dia, m3.percentual, m3.valor_meta, 'TB_METAS_CATN3', 'TB_METAS_CATN3' +FROM vitruvio.tb_metas_catn3 m3 +UNION ALL +SELECT m4.empresa_fk, 'CATEGORIA', TO_CHAR(m4.categoria_fk), TO_CHAR(m4.categoria_pai_fk), 'CATEGORIA', + m4.data_referencia, m4.ano, m4.mes, m4.dia, m4.percentual, m4.valor_meta, 'TB_METAS_CATN4', 'TB_METAS_CATN4' +FROM vitruvio.tb_metas_catn4 m4 +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_VENDA_STG' AND object_type = 'VIEW'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_VENDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql b/migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql new file mode 100644 index 0000000..274260a --- /dev/null +++ b/migrations/C5/20260430000009_seq_tb_flash_nodo_resumo_venda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_VENDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_VENDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql b/migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql new file mode 100644 index 0000000..e3bdb44 --- /dev/null +++ b/migrations/C5/20260430000010_tb_flash_nodo_resumo_venda.sql @@ -0,0 +1,85 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA'; + 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), + 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) + )'; + 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_NODO_RES_VENDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_VENDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_VENDA_NODO ON TB_FLASH_NODO_RESUMO_VENDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_VENDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_VENDA_DATA ON TB_FLASH_NODO_RESUMO_VENDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_VENDA_ANOMESDIA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_VENDA_ANOMESDIA ON TB_FLASH_NODO_RESUMO_VENDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_VENDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql b/migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql new file mode 100644 index 0000000..24b56c3 --- /dev/null +++ b/migrations/C5/20260430000011_prc_flash_carga_meta_venda_stg.sql @@ -0,0 +1,36 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_VENDA_STG ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_META_VENDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_META_VENDA_STG ( + cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, data_carga + ) + SELECT cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, SYSDATE + FROM VW_FLASH_META_VENDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + 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_META_VENDA_STG' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_VENDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql b/migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql new file mode 100644 index 0000000..b27afa3 --- /dev/null +++ b/migrations/C5/20260430000012_prc_flash_carga_meta_venda.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_VENDA ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS + v_id_nodo NUMBER; + v_id_nodo_pai NUMBER; +BEGIN + DELETE FROM TB_FLASH_META_VENDA + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + FOR r IN ( + SELECT * + FROM TB_FLASH_META_VENDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + ) LOOP + v_id_nodo := NULL; + v_id_nodo_pai := NULL; + + IF r.codigo_nodo_pai IS NOT NULL THEN + BEGIN + SELECT n.id_nodo + INTO v_id_nodo_pai + FROM TB_FLASH_NODO n + WHERE n.codigo = r.codigo_nodo_pai + AND n.tipo_nodo = r.tipo_nodo_pai + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1); + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo_pai := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo_pai := NULL; + END; + END IF; + + BEGIN + IF r.tipo_nodo = 'EMPRESA' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'EMPRESA' + AND n.codigo = r.codigo_nodo + AND n.id_nodo_pai IS NULL; + ELSIF r.tipo_nodo = 'PRODUTO' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'PRODUTO' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + ELSE + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'CATEGORIA' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + END IF; + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo := NULL; + END; + + IF v_id_nodo IS NOT NULL THEN + MERGE INTO TB_FLASH_META_VENDA dst + USING ( + SELECT v_id_nodo AS id_nodo, + r.data_referencia AS data_referencia, + r.ano_referencia AS ano_referencia, + r.mes_referencia AS mes_referencia, + r.dia_referencia AS dia_referencia, + r.percentual_meta AS percentual_meta, + r.valor_meta AS valor_meta, + r.observacao AS observacao + FROM dual + ) src + ON (dst.id_nodo = src.id_nodo AND dst.data_referencia = src.data_referencia) + WHEN MATCHED THEN UPDATE SET + dst.percentual_meta = src.percentual_meta, + dst.valor_meta = src.valor_meta, + dst.observacao = src.observacao, + dst.ano_referencia = src.ano_referencia, + dst.mes_referencia = src.mes_referencia, + dst.dia_referencia = src.dia_referencia, + dst.data_atualizacao = SYSDATE + WHEN NOT MATCHED THEN INSERT ( + id_meta, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, data_cadastro, data_atualizacao + ) VALUES ( + SEQ_TB_FLASH_META_VENDA.NEXTVAL, src.id_nodo, src.data_referencia, src.ano_referencia, + src.mes_referencia, src.dia_referencia, src.percentual_meta, src.valor_meta, src.observacao, + SYSDATE, NULL + ); + END IF; + END LOOP; + + 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_META_VENDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_VENDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql b/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql new file mode 100644 index 0000000..9127cbf --- /dev/null +++ b/migrations/C5/20260430000013_prc_flash_carga_resumo_venda.sql @@ -0,0 +1,107 @@ +-- +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 new file mode 100644 index 0000000..3bb8289 --- /dev/null +++ b/migrations/C5/20260430000014_prc_flash_atualiza_venda_dono.sql @@ -0,0 +1,81 @@ +-- +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 new file mode 100644 index 0000000..6fd2d5b --- /dev/null +++ b/migrations/C5/20260430000015_prc_flash_carga_dados_venda.sql @@ -0,0 +1,227 @@ +-- +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, + 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 + +-- +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/20260507000001_seq_tb_flash_fato_contribuicao.sql b/migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql new file mode 100644 index 0000000..96e423d --- /dev/null +++ b/migrations/C5/20260507000001_seq_tb_flash_fato_contribuicao.sql @@ -0,0 +1,24 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + 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/20260507000002_tb_flash_fato_contribuicao.sql new file mode 100644 index 0000000..07062f1 --- /dev/null +++ b/migrations/C5/20260507000002_tb_flash_fato_contribuicao.sql @@ -0,0 +1,112 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_DATA ON TB_FLASH_FATO_CONTRIBUICAO (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_ANOMES'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_ANOMES ON TB_FLASH_FATO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_NODO ON TB_FLASH_FATO_CONTRIBUICAO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_EMP ON TB_FLASH_FATO_CONTRIBUICAO (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_PROD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_PROD ON TB_FLASH_FATO_CONTRIBUICAO (COD_PRODUTO)'; + 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 +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE'; + 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/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql new file mode 100644 index 0000000..064b5cf --- /dev/null +++ b/migrations/C5/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql @@ -0,0 +1,24 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + 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/20260507000010_tb_flash_nodo_resumo_contribuicao.sql new file mode 100644 index 0000000..7b8d179 --- /dev/null +++ b/migrations/C5/20260507000010_tb_flash_nodo_resumo_contribuicao.sql @@ -0,0 +1,90 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + 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), + 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) + )'; + 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_NODO_RES_CONTRIB'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_NODO ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_DATA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql b/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql new file mode 100644 index 0000000..9c854d9 --- /dev/null +++ b/migrations/C5/20260507000011_prc_flash_carga_resumo_contribuicao.sql @@ -0,0 +1,119 @@ +-- +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/20260507000012_prc_flash_atualiza_contribuicao_dono.sql b/migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql new file mode 100644 index 0000000..8c12ae7 --- /dev/null +++ b/migrations/C5/20260507000012_prc_flash_atualiza_contribuicao_dono.sql @@ -0,0 +1,82 @@ +-- +goose Up +-- +goose StatementBegin +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 +) AS + v_inicio_execucao DATE := SYSDATE; +BEGIN + DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_CONTRIBUICAO_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 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 + ); + + 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 contribuição...'); + + 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 + ); + + 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 + ); + + 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)); + +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_CONTRIBUICAO_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_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO'; + END IF; +END; +-- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql b/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql new file mode 100644 index 0000000..942ceba --- /dev/null +++ b/migrations/C5/20260507000013_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,444 @@ +-- +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/20260507000014_tb_flash_meta_contribuicao_stg.sql b/migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql new file mode 100644 index 0000000..24e4b1f --- /dev/null +++ b/migrations/C5/20260507000014_tb_flash_meta_contribuicao_stg.sql @@ -0,0 +1,74 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG'; + 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'')), + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_01'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_01 ON TB_FLASH_META_CONTRIBUICAO_STG (COD_EMPRESA, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_02'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_02 ON TB_FLASH_META_CONTRIBUICAO_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_03'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_03 ON TB_FLASH_META_CONTRIBUICAO_STG (ORIGEM_META)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_CONTRIBUICAO_STG CASCADE CONSTRAINTS PURGE'; + 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/20260507000015_vw_flash_meta_contribuicao_stg.sql new file mode 100644 index 0000000..4d68566 --- /dev/null +++ b/migrations/C5/20260507000015_vw_flash_meta_contribuicao_stg.sql @@ -0,0 +1,34 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE VIEW VW_FLASH_META_CONTRIBUICAO_STG AS +SELECT m1.empresa_fk AS cod_empresa, 'CATEGORIA' AS tipo_nodo, TO_CHAR(m1.categoria_fk) AS codigo_nodo, + TO_CHAR(m1.categoria_pai_fk) AS codigo_nodo_pai, 'CATEGORIA' AS tipo_nodo_pai, + m1.data_referencia, m1.ano AS ano_referencia, m1.mes AS mes_referencia, m1.dia AS dia_referencia, + m1.percentual AS percentual_meta, m1.valor_meta, 'TB_METAS_CONTRIB_CATN1' AS observacao, 'TB_METAS_CONTRIB_CATN1' AS origem_meta +FROM vitruvio.TB_METAS_CONTRIB_CATN1 m1 +UNION ALL +SELECT m2.empresa_fk, 'CATEGORIA', TO_CHAR(m2.categoria_fk), TO_CHAR(m2.categoria_pai_fk), 'CATEGORIA', + m2.data_referencia, m2.ano, m2.mes, m2.dia, m2.percentual, m2.valor_meta, 'TB_METAS_CONTRIB_CATN2', 'TB_METAS_CONTRIB_CATN2' +FROM vitruvio.TB_METAS_CONTRIB_CATN2 m2 +UNION ALL +SELECT m3.empresa_fk, 'CATEGORIA', TO_CHAR(m3.categoria_fk), TO_CHAR(m3.categoria_pai_fk), 'CATEGORIA', + m3.data_referencia, m3.ano, m3.mes, m3.dia, m3.percentual, m3.valor_meta, 'TB_METAS_CONTRIB_CATN3', 'TB_METAS_CONTRIB_CATN3' +FROM vitruvio.TB_METAS_CONTRIB_CATN3 m3 +UNION ALL +SELECT m4.empresa_fk, 'CATEGORIA', TO_CHAR(m4.categoria_fk), TO_CHAR(m4.categoria_pai_fk), 'CATEGORIA', + m4.data_referencia, m4.ano, m4.mes, m4.dia, m4.percentual, m4.valor_meta, 'TB_METAS_CONTRIB_CATN4', 'TB_METAS_CONTRIB_CATN4' +FROM vitruvio.TB_METAS_CONTRIB_CATN4 m4 +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_CONTRIBUICAO_STG' AND object_type = 'VIEW'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_CONTRIBUICAO_STG'; + 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/20260507000016_seq_tb_flash_meta_contribuicao.sql new file mode 100644 index 0000000..27bfb84 --- /dev/null +++ b/migrations/C5/20260507000016_seq_tb_flash_meta_contribuicao.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_META_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_META_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql b/migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql new file mode 100644 index 0000000..c85e469 --- /dev/null +++ b/migrations/C5/20260507000017_tb_flash_meta_contribuicao.sql @@ -0,0 +1,80 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO'; + 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), + 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) + )'; + 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_META_CONTRIBUICAO'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CONTRIBUICAO_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CONTRIBUICAO_NODO ON TB_FLASH_META_CONTRIBUICAO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CONTRIBUICAO_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CONTRIBUICAO_DATA ON TB_FLASH_META_CONTRIBUICAO (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_ANOMESDIA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_ANOMESDIA ON TB_FLASH_META_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_CONTRIBUICAO CASCADE CONSTRAINTS PURGE'; + 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 new file mode 100644 index 0000000..7ba0085 --- /dev/null +++ b/migrations/C5/20260513000001_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,866 @@ +-- +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/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql b/migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql new file mode 100644 index 0000000..43c4593 --- /dev/null +++ b/migrations/C5/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql @@ -0,0 +1,36 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO_STG ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_META_CONTRIBUICAO_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_META_CONTRIBUICAO_STG ( + cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, data_carga + ) + SELECT cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, SYSDATE + FROM VW_FLASH_META_CONTRIBUICAO_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + 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_META_CONTRIBUICAO_STG' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql b/migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql new file mode 100644 index 0000000..2e4256f --- /dev/null +++ b/migrations/C5/20260513000003_prc_flash_carga_meta_contribuicao.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS + v_id_nodo NUMBER; + v_id_nodo_pai NUMBER; +BEGIN + DELETE FROM TB_FLASH_META_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + FOR r IN ( + SELECT * + FROM TB_FLASH_META_CONTRIBUICAO_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + ) LOOP + v_id_nodo := NULL; + v_id_nodo_pai := NULL; + + IF r.codigo_nodo_pai IS NOT NULL THEN + BEGIN + SELECT n.id_nodo + INTO v_id_nodo_pai + FROM TB_FLASH_NODO n + WHERE n.codigo = r.codigo_nodo_pai + AND n.tipo_nodo = r.tipo_nodo_pai + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1); + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo_pai := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo_pai := NULL; + END; + END IF; + + BEGIN + IF r.tipo_nodo = 'EMPRESA' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'EMPRESA' + AND n.codigo = r.codigo_nodo + AND n.id_nodo_pai IS NULL; + ELSIF r.tipo_nodo = 'PRODUTO' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'PRODUTO' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + ELSE + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'CATEGORIA' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + END IF; + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo := NULL; + END; + + IF v_id_nodo IS NOT NULL THEN + MERGE INTO TB_FLASH_META_CONTRIBUICAO dst + USING ( + SELECT v_id_nodo AS id_nodo, + r.data_referencia AS data_referencia, + r.ano_referencia AS ano_referencia, + r.mes_referencia AS mes_referencia, + r.dia_referencia AS dia_referencia, + r.percentual_meta AS percentual_meta, + r.valor_meta AS valor_meta, + r.observacao AS observacao + FROM dual + ) src + ON (dst.id_nodo = src.id_nodo AND dst.data_referencia = src.data_referencia) + WHEN MATCHED THEN UPDATE SET + dst.percentual_meta = src.percentual_meta, + dst.valor_meta = src.valor_meta, + dst.observacao = src.observacao, + dst.ano_referencia = src.ano_referencia, + dst.mes_referencia = src.mes_referencia, + dst.dia_referencia = src.dia_referencia, + dst.data_atualizacao = SYSDATE + WHEN NOT MATCHED THEN INSERT ( + id_meta, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, data_cadastro, data_atualizacao + ) VALUES ( + SEQ_TB_FLASH_META_CONTRIBUICAO.NEXTVAL, src.id_nodo, src.data_referencia, src.ano_referencia, + src.mes_referencia, src.dia_referencia, src.percentual_meta, src.valor_meta, src.observacao, + SYSDATE, NULL + ); + END IF; + END LOOP; + + 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_META_CONTRIBUICAO' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO'; + END IF; +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 new file mode 100644 index 0000000..4ac4e90 --- /dev/null +++ b/migrations/C5/20260513000004_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,867 @@ +-- +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 consinco.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 consinco.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.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 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.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 + +-- +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.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 diff --git a/migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql b/migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql new file mode 100644 index 0000000..455ee70 --- /dev/null +++ b/migrations/C5/20260520000001_seq_tb_flash_fato_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000002_tb_flash_fato_perda.sql b/migrations/C5/20260520000002_tb_flash_fato_perda.sql new file mode 100644 index 0000000..8cf4dfa --- /dev/null +++ b/migrations/C5/20260520000002_tb_flash_fato_perda.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_DATA ON TB_FLASH_FATO_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_ANOMES'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_ANOMES ON TB_FLASH_FATO_PERDA (ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_NODO ON TB_FLASH_FATO_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_EMP ON TB_FLASH_FATO_PERDA (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_PROD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_PROD ON TB_FLASH_FATO_PERDA (COD_PRODUTO)'; + 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 +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql b/migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql new file mode 100644 index 0000000..956ffe9 --- /dev/null +++ b/migrations/C5/20260520000003_seq_tb_flash_meta_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_META_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_META_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000004_tb_flash_meta_perda.sql b/migrations/C5/20260520000004_tb_flash_meta_perda.sql new file mode 100644 index 0000000..f235662 --- /dev/null +++ b/migrations/C5/20260520000004_tb_flash_meta_perda.sql @@ -0,0 +1,80 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA'; + 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), + 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) + )'; + 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_META_PERDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_NODO ON TB_FLASH_META_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_DATA ON TB_FLASH_META_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_AMSD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_AMSD ON TB_FLASH_META_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql b/migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql new file mode 100644 index 0000000..4526b51 --- /dev/null +++ b/migrations/C5/20260520000005_tb_flash_meta_perda_stg.sql @@ -0,0 +1,73 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_01'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_01 ON TB_FLASH_META_PERDA_STG (COD_EMPRESA, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_02'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_02 ON TB_FLASH_META_PERDA_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_03'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_03 ON TB_FLASH_META_PERDA_STG (ORIGEM_META)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA_STG CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql b/migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql new file mode 100644 index 0000000..f831bef --- /dev/null +++ b/migrations/C5/20260520000006_vw_flash_meta_perda_stg.sql @@ -0,0 +1,32 @@ +-- +goose Up +-- +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 VARCHAR2(500)) AS observacao, + CAST(NULL AS VARCHAR2(100)) AS origem_meta +FROM dual +WHERE 1 = 0 +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_PERDA_STG' AND object_type = 'VIEW'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_PERDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql b/migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql new file mode 100644 index 0000000..2b478be --- /dev/null +++ b/migrations/C5/20260520000007_seq_tb_flash_nodo_resumo_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql b/migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql new file mode 100644 index 0000000..1fc567d --- /dev/null +++ b/migrations/C5/20260520000008_tb_flash_nodo_resumo_perda.sql @@ -0,0 +1,85 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA'; + 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), + 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) + )'; + 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_NODO_RES_PERDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_NODO ON TB_FLASH_NODO_RESUMO_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_DATA ON TB_FLASH_NODO_RESUMO_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_AMSD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_AMSD ON TB_FLASH_NODO_RESUMO_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql b/migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql new file mode 100644 index 0000000..e95bfb8 --- /dev/null +++ b/migrations/C5/20260520000009_prc_flash_carga_meta_perda_stg.sql @@ -0,0 +1,36 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_META_PERDA_STG ( + cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, data_carga + ) + SELECT cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, SYSDATE + FROM VW_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + 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_META_PERDA_STG' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql b/migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql new file mode 100644 index 0000000..bc6420d --- /dev/null +++ b/migrations/C5/20260520000010_prc_flash_carga_meta_perda.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS + v_id_nodo NUMBER; + v_id_nodo_pai NUMBER; +BEGIN + DELETE FROM TB_FLASH_META_PERDA + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + FOR r IN ( + SELECT * + FROM TB_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + ) LOOP + v_id_nodo := NULL; + v_id_nodo_pai := NULL; + + IF r.codigo_nodo_pai IS NOT NULL THEN + BEGIN + SELECT n.id_nodo + INTO v_id_nodo_pai + FROM TB_FLASH_NODO n + WHERE n.codigo = r.codigo_nodo_pai + AND n.tipo_nodo = r.tipo_nodo_pai + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1); + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo_pai := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo_pai := NULL; + END; + END IF; + + BEGIN + IF r.tipo_nodo = 'EMPRESA' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'EMPRESA' + AND n.codigo = r.codigo_nodo + AND n.id_nodo_pai IS NULL; + ELSIF r.tipo_nodo = 'PRODUTO' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'PRODUTO' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + ELSE + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'CATEGORIA' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + END IF; + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo := NULL; + END; + + IF v_id_nodo IS NOT NULL THEN + MERGE INTO TB_FLASH_META_PERDA dst + USING ( + SELECT v_id_nodo AS id_nodo, + r.data_referencia AS data_referencia, + r.ano_referencia AS ano_referencia, + r.mes_referencia AS mes_referencia, + r.dia_referencia AS dia_referencia, + r.percentual_meta AS percentual_meta, + r.valor_meta AS valor_meta, + r.observacao AS observacao + FROM dual + ) src + ON (dst.id_nodo = src.id_nodo AND dst.data_referencia = src.data_referencia) + WHEN MATCHED THEN UPDATE SET + dst.percentual_meta = src.percentual_meta, + dst.valor_meta = src.valor_meta, + dst.observacao = src.observacao, + dst.ano_referencia = src.ano_referencia, + dst.mes_referencia = src.mes_referencia, + dst.dia_referencia = src.dia_referencia, + dst.data_atualizacao = SYSDATE + WHEN NOT MATCHED THEN INSERT ( + id_meta, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, data_cadastro, data_atualizacao + ) VALUES ( + SEQ_TB_FLASH_META_PERDA.NEXTVAL, src.id_nodo, src.data_referencia, src.ano_referencia, + src.mes_referencia, src.dia_referencia, src.percentual_meta, src.valor_meta, src.observacao, + SYSDATE, NULL + ); + END IF; + END LOOP; + + 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_META_PERDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA'; + END IF; +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 new file mode 100644 index 0000000..21026b0 --- /dev/null +++ b/migrations/C5/20260520000011_prc_flash_carga_resumo_perda.sql @@ -0,0 +1,107 @@ +-- +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/20260520000012_prc_flash_atualiza_perda_dono.sql b/migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql new file mode 100644 index 0000000..a01077a --- /dev/null +++ b/migrations/C5/20260520000012_prc_flash_atualiza_perda_dono.sql @@ -0,0 +1,81 @@ +-- +goose Up +-- +goose StatementBegin +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 +) AS + v_inicio_execucao DATE := SYSDATE; +BEGIN + DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_PERDA_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 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 + ); + + 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 perda...'); + + 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 + ); + + 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 + ); + + 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)); + +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_PERDA_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_PERDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO'; + 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 new file mode 100644 index 0000000..983cbfb --- /dev/null +++ b/migrations/C5/20260520000013_prc_flash_carga_dados_perda.sql @@ -0,0 +1,186 @@ +-- +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_big/20260520000001_seq_tb_flash_fato_perda.sql b/migrations/C5_big/20260520000001_seq_tb_flash_fato_perda.sql new file mode 100644 index 0000000..455ee70 --- /dev/null +++ b/migrations/C5_big/20260520000001_seq_tb_flash_fato_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000002_tb_flash_fato_perda.sql b/migrations/C5_big/20260520000002_tb_flash_fato_perda.sql new file mode 100644 index 0000000..8cf4dfa --- /dev/null +++ b/migrations/C5_big/20260520000002_tb_flash_fato_perda.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_DATA ON TB_FLASH_FATO_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_ANOMES'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_ANOMES ON TB_FLASH_FATO_PERDA (ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_NODO ON TB_FLASH_FATO_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_EMP ON TB_FLASH_FATO_PERDA (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_PROD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_PROD ON TB_FLASH_FATO_PERDA (COD_PRODUTO)'; + 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 +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000003_seq_tb_flash_meta_perda.sql b/migrations/C5_big/20260520000003_seq_tb_flash_meta_perda.sql new file mode 100644 index 0000000..956ffe9 --- /dev/null +++ b/migrations/C5_big/20260520000003_seq_tb_flash_meta_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_META_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_META_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000004_tb_flash_meta_perda.sql b/migrations/C5_big/20260520000004_tb_flash_meta_perda.sql new file mode 100644 index 0000000..f235662 --- /dev/null +++ b/migrations/C5_big/20260520000004_tb_flash_meta_perda.sql @@ -0,0 +1,80 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA'; + 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), + 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) + )'; + 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_META_PERDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_NODO ON TB_FLASH_META_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_DATA ON TB_FLASH_META_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_AMSD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_AMSD ON TB_FLASH_META_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000005_tb_flash_meta_perda_stg.sql b/migrations/C5_big/20260520000005_tb_flash_meta_perda_stg.sql new file mode 100644 index 0000000..4526b51 --- /dev/null +++ b/migrations/C5_big/20260520000005_tb_flash_meta_perda_stg.sql @@ -0,0 +1,73 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG'; + 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, + 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) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_01'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_01 ON TB_FLASH_META_PERDA_STG (COD_EMPRESA, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_02'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_02 ON TB_FLASH_META_PERDA_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_03'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_03 ON TB_FLASH_META_PERDA_STG (ORIGEM_META)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA_STG CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000006_vw_flash_meta_perda_stg.sql b/migrations/C5_big/20260520000006_vw_flash_meta_perda_stg.sql new file mode 100644 index 0000000..f831bef --- /dev/null +++ b/migrations/C5_big/20260520000006_vw_flash_meta_perda_stg.sql @@ -0,0 +1,32 @@ +-- +goose Up +-- +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 VARCHAR2(500)) AS observacao, + CAST(NULL AS VARCHAR2(100)) AS origem_meta +FROM dual +WHERE 1 = 0 +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_PERDA_STG' AND object_type = 'VIEW'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_PERDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000007_seq_tb_flash_nodo_resumo_perda.sql b/migrations/C5_big/20260520000007_seq_tb_flash_nodo_resumo_perda.sql new file mode 100644 index 0000000..2b478be --- /dev/null +++ b/migrations/C5_big/20260520000007_seq_tb_flash_nodo_resumo_perda.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000008_tb_flash_nodo_resumo_perda.sql b/migrations/C5_big/20260520000008_tb_flash_nodo_resumo_perda.sql new file mode 100644 index 0000000..1fc567d --- /dev/null +++ b/migrations/C5_big/20260520000008_tb_flash_nodo_resumo_perda.sql @@ -0,0 +1,85 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA'; + 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), + 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) + )'; + 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_NODO_RES_PERDA'; + 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)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_NODO ON TB_FLASH_NODO_RESUMO_PERDA (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_DATA ON TB_FLASH_NODO_RESUMO_PERDA (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_AMSD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_AMSD ON TB_FLASH_NODO_RESUMO_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_PERDA CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000009_prc_flash_carga_meta_perda_stg.sql b/migrations/C5_big/20260520000009_prc_flash_carga_meta_perda_stg.sql new file mode 100644 index 0000000..e95bfb8 --- /dev/null +++ b/migrations/C5_big/20260520000009_prc_flash_carga_meta_perda_stg.sql @@ -0,0 +1,36 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_META_PERDA_STG ( + cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, data_carga + ) + SELECT cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, SYSDATE + FROM VW_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + 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_META_PERDA_STG' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000010_prc_flash_carga_meta_perda.sql b/migrations/C5_big/20260520000010_prc_flash_carga_meta_perda.sql new file mode 100644 index 0000000..bc6420d --- /dev/null +++ b/migrations/C5_big/20260520000010_prc_flash_carga_meta_perda.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS + v_id_nodo NUMBER; + v_id_nodo_pai NUMBER; +BEGIN + DELETE FROM TB_FLASH_META_PERDA + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + FOR r IN ( + SELECT * + FROM TB_FLASH_META_PERDA_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + ) LOOP + v_id_nodo := NULL; + v_id_nodo_pai := NULL; + + IF r.codigo_nodo_pai IS NOT NULL THEN + BEGIN + SELECT n.id_nodo + INTO v_id_nodo_pai + FROM TB_FLASH_NODO n + WHERE n.codigo = r.codigo_nodo_pai + AND n.tipo_nodo = r.tipo_nodo_pai + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1); + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo_pai := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo_pai := NULL; + END; + END IF; + + BEGIN + IF r.tipo_nodo = 'EMPRESA' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'EMPRESA' + AND n.codigo = r.codigo_nodo + AND n.id_nodo_pai IS NULL; + ELSIF r.tipo_nodo = 'PRODUTO' THEN + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'PRODUTO' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + ELSE + SELECT n.id_nodo INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE n.tipo_nodo = 'CATEGORIA' + AND n.codigo = r.codigo_nodo + AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1) + AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai); + END IF; + EXCEPTION + WHEN TOO_MANY_ROWS THEN v_id_nodo := NULL; + WHEN NO_DATA_FOUND THEN v_id_nodo := NULL; + END; + + IF v_id_nodo IS NOT NULL THEN + MERGE INTO TB_FLASH_META_PERDA dst + USING ( + SELECT v_id_nodo AS id_nodo, + r.data_referencia AS data_referencia, + r.ano_referencia AS ano_referencia, + r.mes_referencia AS mes_referencia, + r.dia_referencia AS dia_referencia, + r.percentual_meta AS percentual_meta, + r.valor_meta AS valor_meta, + r.observacao AS observacao + FROM dual + ) src + ON (dst.id_nodo = src.id_nodo AND dst.data_referencia = src.data_referencia) + WHEN MATCHED THEN UPDATE SET + dst.percentual_meta = src.percentual_meta, + dst.valor_meta = src.valor_meta, + dst.observacao = src.observacao, + dst.ano_referencia = src.ano_referencia, + dst.mes_referencia = src.mes_referencia, + dst.dia_referencia = src.dia_referencia, + dst.data_atualizacao = SYSDATE + WHEN NOT MATCHED THEN INSERT ( + id_meta, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, data_cadastro, data_atualizacao + ) VALUES ( + SEQ_TB_FLASH_META_PERDA.NEXTVAL, src.id_nodo, src.data_referencia, src.ano_referencia, + src.mes_referencia, src.dia_referencia, src.percentual_meta, src.valor_meta, src.observacao, + SYSDATE, NULL + ); + END IF; + END LOOP; + + 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_META_PERDA' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000011_prc_flash_carga_resumo_perda.sql b/migrations/C5_big/20260520000011_prc_flash_carga_resumo_perda.sql new file mode 100644 index 0000000..21026b0 --- /dev/null +++ b/migrations/C5_big/20260520000011_prc_flash_carga_resumo_perda.sql @@ -0,0 +1,107 @@ +-- +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_big/20260520000012_prc_flash_atualiza_perda_dono.sql b/migrations/C5_big/20260520000012_prc_flash_atualiza_perda_dono.sql new file mode 100644 index 0000000..a01077a --- /dev/null +++ b/migrations/C5_big/20260520000012_prc_flash_atualiza_perda_dono.sql @@ -0,0 +1,81 @@ +-- +goose Up +-- +goose StatementBegin +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 +) AS + v_inicio_execucao DATE := SYSDATE; +BEGIN + DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_PERDA_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 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 + ); + + 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 perda...'); + + 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 + ); + + 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 + ); + + 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)); + +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_PERDA_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_PERDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260520000013_prc_flash_carga_dados_perda.sql b/migrations/C5_big/20260520000013_prc_flash_carga_dados_perda.sql new file mode 100644 index 0000000..983cbfb --- /dev/null +++ b/migrations/C5_big/20260520000013_prc_flash_carga_dados_perda.sql @@ -0,0 +1,186 @@ +-- +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