7 Commits

Author SHA1 Message Date
tkinaba d4d1a17cc0 Merge branch 'main' into develop
davinTI/app-dono-modulos/pipeline/head There was a failure building this commit
2026-05-13 14:50:01 -03:00
tkinaba 35050a95c6 chore: bump jeff version 1.0.11
davinTI/app-dono-modulos/pipeline/head This commit looks good
2026-05-13 14:48:06 -03:00
tkinaba 03cd88e492 Merge branch 'main' into develop
davinTI/app-dono-modulos/pipeline/head This commit looks good
2026-05-13 14:47:04 -03:00
tkinaba 6310ea5633 Merge branch 'main' into develop 2026-04-30 12:09:31 -03:00
lucas.favaro 27e2c95d8e Criação do agendamento para execução da atualização do Flash de Vendas. 2026-04-30 10:13:13 -03:00
lucas.favaro b46a210a67 Merge branch 'develop' of https://git.davinti.com.br/davinTI/app-dono-modulos into develop 2026-04-29 15:32:41 -03:00
lucas.favaro b6a81e0e02 Alteração em query Flash Vendas 2026-04-29 15:32:27 -03:00
72 changed files with 603 additions and 8181 deletions
+10
View File
@@ -0,0 +1,10 @@
{
"permissions": {
"allow": [
"Bash(git checkout *)",
"Bash(git pull *)",
"Bash(git cherry-pick *)",
"Bash(git push *)"
]
}
}
@@ -1,23 +0,0 @@
-- +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
@@ -1,113 +0,0 @@
-- +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 CK_TB_FLASH_NODO_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
CONSTRAINT CK_TB_FLASH_NODO_ATIVO CHECK (ATIVO IN (''S'', ''N'')),
CONSTRAINT CK_TB_FLASH_NODO_NIVEL CHECK (NIVEL >= 1),
CONSTRAINT PK_TB_FLASH_NODO PRIMARY KEY (ID_NODO),
CONSTRAINT UK_TB_FLASH_NODO_PAI_TIPO_COD UNIQUE (ID_NODO_PAI, TIPO_NODO, CODIGO)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_PAI';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO ADD CONSTRAINT FK_TB_FLASH_NODO_PAI FOREIGN KEY (ID_NODO_PAI) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
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_indexes WHERE index_name = 'IX_TB_FLASH_NODO_EMP_PROD';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_EMP_PROD ON TB_FLASH_NODO (TIPO_NODO, COD_EMPRESA, COD_PRODUTO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'TB_FLASH_NODO_ID_NODO_PAI_IDX';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX TB_FLASH_NODO_ID_NODO_PAI_IDX ON TB_FLASH_NODO (ID_NODO_PAI, TIPO_NODO, CODIGO, COD_EMPRESA)';
END IF;
END;
-- +goose StatementEnd
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,131 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0),
DIA_SEMANA NUMBER(2,0),
ID_NODO NUMBER NOT NULL,
ID_NODO_EMPRESA NUMBER NOT NULL,
COD_EMPRESA NUMBER NOT NULL,
NOME_EMPRESA VARCHAR2(200),
COD_PRODUTO NUMBER NOT NULL,
DESCRICAO_PRODUTO VARCHAR2(300),
SEQPRODUTOBASE NUMBER,
NRODIVISAO NUMBER,
NROSEGMENTO NUMBER,
NRO_TICKETS NUMBER(18,6),
VLR_IMP_VENDA NUMBER(18,6),
QTDE_VENDA NUMBER(18,6),
VLR_VENDA NUMBER(18,6),
VL_TICKET_MEDIO NUMBER(18,6),
PROPQTDPRODUTOBASE NUMBER(18,6),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_FATO_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT PK_TB_FLASH_FATO_VENDA PRIMARY KEY (ID_FATO),
CONSTRAINT UK_TB_FLASH_FATO_VENDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_VENDA_EMP';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD CONSTRAINT FK_TB_FLASH_FATO_VENDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
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_indexes WHERE index_name = 'TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX TB_FLASH_FATO_VENDA_DATA_REFERENCIA_IDX ON TB_FLASH_FATO_VENDA (DATA_REFERENCIA, COD_EMPRESA)';
END IF;
END;
-- +goose StatementEnd
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,80 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
DATA_ATUALIZACAO DATE,
CONSTRAINT CK_TB_FLASH_META_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_META_VENDA PRIMARY KEY (ID_META),
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_constraints WHERE constraint_name = 'FK_TB_FLASH_META_VENDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_VENDA ADD CONSTRAINT FK_TB_FLASH_META_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,73 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
ORIGEM_META VARCHAR2(100),
DATA_CARGA DATE DEFAULT SYSDATE,
CONSTRAINT CK_TB_FLASH_META_VDA_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
CONSTRAINT CK_TB_FLASH_META_VDA_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL),
CONSTRAINT CK_TB_FLASH_META_VDA_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_VDA_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
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
@@ -1,33 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,87 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
VALOR_VENDA NUMBER(18,6),
VALOR_META_PROPRIA NUMBER(18,6),
VALOR_META_FILHOS NUMBER(18,6),
VALOR_META_EFETIVA NUMBER(18,6),
PERCENTUAL_META_PROPRIA NUMBER(10,4),
PERCENTUAL_META_FILHOS NUMBER(10,4),
PERCENTUAL_META_EFETIVA NUMBER(10,4),
DESVIO NUMBER(18,6),
PERCENTUAL_ATINGIMENTO NUMBER(18,6),
DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL,
NRO_SEGMENTO NUMBER(24,0),
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_NODO_RES_VENDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_NODO_RES_VENDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_NODO_RES_VENDA PRIMARY KEY (ID_RESUMO),
CONSTRAINT UK_TB_FLASH_NODO_RES_VENDA UNIQUE (ID_NODO, DATA_REFERENCIA)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_VENDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD CONSTRAINT FK_TB_FLASH_NODO_RES_VENDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,36 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,109 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,112 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_VENDA
WHERE data_referencia >= TRUNC(p_data_inicial)
AND data_referencia < TRUNC(p_data_final) + 1;
INSERT INTO TB_FLASH_NODO_RESUMO_VENDA (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento
)
WITH venda_direta AS (
SELECT f.id_nodo,
TRUNC(f.data_referencia) AS data_referencia,
EXTRACT(YEAR FROM TRUNC(f.data_referencia)) AS ano_referencia,
EXTRACT(MONTH FROM TRUNC(f.data_referencia)) AS mes_referencia,
EXTRACT(DAY FROM TRUNC(f.data_referencia)) AS dia_referencia,
SUM(f.vlr_venda) AS valor_venda,
MAX(f.nrosegmento) AS nro_segmento,
MAX(f.nome_segmento) AS nome_segmento
FROM TB_FLASH_FATO_VENDA f
WHERE f.data_referencia >= TRUNC(p_data_inicial)
AND f.data_referencia < TRUNC(p_data_final) + 1
GROUP BY f.id_nodo, TRUNC(f.data_referencia)
),
hierarquia AS (
SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
),
venda_hierarquia AS (
SELECT h.id_nodo_ancestral AS id_nodo,
vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia,
SUM(vd.valor_venda) AS valor_venda
FROM hierarquia h
JOIN venda_direta vd ON vd.id_nodo = h.id_nodo_descendente
GROUP BY h.id_nodo_ancestral, vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia
),
meta_propria_diaria AS (
SELECT m.id_nodo,
TRUNC(m.data_referencia) AS data_referencia,
EXTRACT(YEAR FROM TRUNC(m.data_referencia)) AS ano_referencia,
EXTRACT(MONTH FROM TRUNC(m.data_referencia)) AS mes_referencia,
EXTRACT(DAY FROM TRUNC(m.data_referencia)) AS dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_VENDA m
WHERE m.data_referencia >= TRUNC(p_data_inicial)
AND m.data_referencia < TRUNC(p_data_final) + 1
GROUP BY m.id_nodo, TRUNC(m.data_referencia)
),
meta_filhos_diaria AS (
SELECT pai.id_nodo,
mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
base AS (
SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM venda_hierarquia
UNION
SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM meta_propria_diaria
UNION
SELECT id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia FROM meta_filhos_diaria
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_VENDA.NEXTVAL,
b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
NVL(vh.valor_venda, 0) AS valor_venda,
mpd.valor_meta_propria,
mfd.valor_meta_filhos,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva,
mpd.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)) AS percentual_meta_filhos,
CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END AS percentual_meta_efetiva,
NVL(vh.valor_venda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) AS desvio,
CASE
WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL
ELSE NVL(vh.valor_venda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END * 100
END AS percentual_atingimento,
SYSDATE,
vd.nro_segmento,
vd.nome_segmento
FROM base b
LEFT JOIN venda_hierarquia vh ON vh.id_nodo = b.id_nodo AND vh.data_referencia = b.data_referencia
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia
LEFT JOIN venda_direta vd ON vd.id_nodo = b.id_nodo AND vd.data_referencia = b.data_referencia;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_VENDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,111 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 DEFAULT NULL
) AS
BEGIN
DELETE FROM TB_FLASH_FATO_VENDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
INSERT INTO TB_FLASH_FATO_VENDA (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda,
vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento
)
WITH pg AS (
SELECT MAX(indutilicmstaresugprabc) AS indutilicmstaresugprabc
FROM consinco.max_paramgeral
),
cat AS (
SELECT dc.nrodivisao, dc.seqfamilia,
MAX(CASE WHEN cc.nivelhierarquia = 1 THEN dc.seqcategoria END) AS codcatn1,
MAX(CASE WHEN cc.nivelhierarquia = 1 THEN cc.categoria END) AS nomecatn1,
MAX(CASE WHEN cc.nivelhierarquia = 2 THEN dc.seqcategoria END) AS codcatn2,
MAX(CASE WHEN cc.nivelhierarquia = 2 THEN cc.categoria END) AS nomecatn2,
MAX(CASE WHEN cc.nivelhierarquia = 3 THEN dc.seqcategoria END) AS codcatn3,
MAX(CASE WHEN cc.nivelhierarquia = 3 THEN cc.categoria END) AS nomecatn3,
MAX(CASE WHEN cc.nivelhierarquia = 4 THEN dc.seqcategoria END) AS codcatn4,
MAX(CASE WHEN cc.nivelhierarquia = 4 THEN cc.categoria END) AS nomecatn4,
MAX(CASE WHEN cc.nivelhierarquia = 5 THEN dc.seqcategoria END) AS codcatn5,
MAX(CASE WHEN cc.nivelhierarquia = 5 THEN cc.categoria END) AS nomecatn5
FROM consinco.map_famdivcateg dc
JOIN consinco.map_categoria cc
ON cc.seqcategoria = dc.seqcategoria AND cc.nrodivisao = dc.nrodivisao
AND cc.statuscategor = 'A' AND cc.tipcategoria = 'M' AND cc.nivelhierarquia BETWEEN 1 AND 5
WHERE dc.status = 'A'
GROUP BY dc.nrodivisao, dc.seqfamilia
),
dados AS (
SELECT dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento,
e.nroempresa AS empresa, e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto, a.seqprodutobase, a.desccompleta AS descricao,
z.dtaentradasaida AS data_referencia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'D')) AS dia_semana,
TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'DD')) AS dia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'MM')) AS mes,
TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'YYYY')) AS ano,
0 AS nro_tickets,
SUM(DECODE(y.qtdvda,0,0,(y.vlrimpostovda+NVL(DECODE(pg.indutilicmstaresugprabc,'S',COALESCE(y.vlricmsvdasolicit,y.vlricmsvda),y.vlricmsvda),0)+NVL(y.vlrpisvda,0)+NVL(y.vlrcofinsvda,0))/y.qtdvda)*z.qtdvda)
+SUM(DECODE(NVL(y.qtddevol,0),0,0,(NVL(y.vlrimpostodevol,0)+NVL(DECODE(pg.indutilicmstaresugprabc,'S',DECODE(y.qtdvda,0,0,COALESCE((y.vlricmsvdasolicit/y.qtdvda)*y.qtddevol,y.vlricmsdevol)),((z.vlricmsvda/GREATEST(z.qtdvda,1))*NVL(z.qtddevol,0))),0)+NVL(y.vlrpisdevol,0)+NVL(y.vlrcofinsdevol,0))/y.qtddevol)*(0-NVL(z.qtddevol,0))) AS vlr_imp_venda,
SUM((z.qtdvda - NVL(z.qtddevol,0)) / k.qtdembalagem) AS qtde_venda,
SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol,0)) AS vlr_venda,
0 AS vl_ticket_medio,
a.propqtdprodutobase
FROM consinco.mrl_custodia z
JOIN consinco.max_empresa e ON e.nroempresa = z.nroempresa
JOIN consinco.mrl_custodia y ON y.seqproduto = z.seqproduto AND y.dtaentradasaida = z.dtaentradasaida AND y.nroempresa = z.nroempresa
JOIN consinco.map_famdivisao d ON d.seqfamilia = z.seqfamilia AND d.nrodivisao = e.nrodivisao
JOIN consinco.max_divisao dv ON dv.nrodivisao = d.nrodivisao
JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = d.nrodivisao
JOIN consinco.mad_famsegmento h ON h.seqfamilia = z.seqfamilia AND h.nrosegmento = e.nrosegmentoprinc AND h.nrosegmento = seg1.nrosegmento
JOIN consinco.map_famembalagem k ON k.seqfamilia = h.seqfamilia AND k.qtdembalagem = 1
JOIN consinco.map_produto a ON a.seqproduto = z.seqproduto AND a.seqfamilia = d.seqfamilia
JOIN cat ON cat.nrodivisao = d.nrodivisao AND cat.seqfamilia = d.seqfamilia
CROSS JOIN pg
WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
AND z.nroempresa = p_empresa
AND (p_divisao IS NULL OR d.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL))
AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0)
AND EXISTS (SELECT 1 FROM consinco.maxv_abcdistribbase b WHERE b.seqproduto=z.seqproduto AND b.nroempresa=z.nroempresa AND b.dtavda=z.dtaentradasaida AND (p_cgos IS NULL OR b.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL)))
GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido,
a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, a.propqtdprodutobase
),
nodo_empresa AS (
SELECT codigo, MAX(id_nodo) AS id_nodo
FROM TB_FLASH_NODO WHERE tipo_nodo = 'EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo
),
nodo_produto AS (
SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo
FROM TB_FLASH_NODO WHERE tipo_nodo = 'PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase
)
SELECT SEQ_TB_FLASH_FATO_VENDA.NEXTVAL,
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
np.id_nodo AS id_nodo, ne.id_nodo AS id_nodo_empresa,
r.empresa, r.nomeempresa, r.cod_produto, r.descricao, r.seqprodutobase,
r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, r.qtde_venda,
r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE, r.descsegmento
FROM dados r
JOIN nodo_empresa ne ON ne.codigo = TO_CHAR(r.empresa)
JOIN nodo_produto np ON np.codigo = TO_CHAR(r.cod_produto) AND np.cod_empresa = r.empresa AND NVL(np.seqprodutobase,-1) = NVL(r.seqprodutobase,-1);
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_VENDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_VENDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,71 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresas IN VARCHAR2 DEFAULT NULL,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 DEFAULT NULL
) AS
v_inicio_execucao DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA_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_EXTERNO AS CODIGO
FROM vitruvio.vi_lojas V
WHERE p_empresas IS NULL
OR CODIGO_EXTERNO IN (
SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL)
FROM dual
CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL
)
ORDER BY CODIGO_EXTERNO
) LOOP
BEGIN
DBMS_OUTPUT.PUT_LINE('Carregando venda da empresa: ' || r.codigo);
PRC_FLASH_CARGA_DADOS_VENDA(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final,
p_empresa => r.codigo,
p_divisao => p_divisao,
p_cgos => p_cgos
);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM);
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 user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_VENDA_DONO';
END IF;
END;
-- +goose StatementEnd
@@ -1,23 +0,0 @@
-- +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
@@ -1,121 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0),
DIA_SEMANA NUMBER(2,0),
ID_NODO NUMBER NOT NULL,
ID_NODO_EMPRESA NUMBER NOT NULL,
COD_EMPRESA NUMBER NOT NULL,
NOME_EMPRESA VARCHAR2(200),
COD_PRODUTO NUMBER NOT NULL,
DESCRICAO_PRODUTO VARCHAR2(300),
SEQPRODUTOBASE NUMBER,
NRODIVISAO NUMBER,
NROSEGMENTO NUMBER,
NRO_TICKETS NUMBER(18,6),
VLR_IMP_CONTRIBUICAO NUMBER(18,6),
QTDE_CONTRIBUICAO NUMBER(18,6),
VLR_CONTRIBUICAO NUMBER(18,6),
VL_TICKET_MEDIO NUMBER(18,6),
PROPQTDPRODUTOBASE NUMBER(18,6),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_FATO_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT PK_TB_FLASH_FATO_CONTRIBUICAO PRIMARY KEY (ID_FATO),
CONSTRAINT UK_TB_FLASH_FATO_CONTRIBUICAO UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_CONTRIB_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_CONTRIB_EMP';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
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 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
@@ -1,23 +0,0 @@
-- +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
@@ -1,80 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
DATA_ATUALIZACAO DATE,
CONSTRAINT CK_TB_FLASH_META_CONTRIBUICAO_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_CONTRIBUICAO_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_META_CONTRIBUICAO PRIMARY KEY (ID_META),
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_constraints WHERE constraint_name = 'FK_TB_FLASH_META_CONTRIBUICAO_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_META_CONTRIBUICAO_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,73 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
ORIGEM_META VARCHAR2(100),
DATA_CARGA DATE DEFAULT SYSDATE,
CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL),
CONSTRAINT CK_TB_FLASH_META_CTB_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_CTB_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
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
@@ -1,33 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,91 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
NRO_TICKETS NUMBER(18,6),
VLR_IMP_CONTRIBUICAO NUMBER(18,6),
QTDE_CONTRIBUICAO NUMBER(18,6),
VLR_CONTRIBUICAO NUMBER(18,6),
VL_TICKET_MEDIO NUMBER(18,6),
VALOR_META_PROPRIA NUMBER(18,6),
VALOR_META_FILHOS NUMBER(18,6),
VALOR_META_EFETIVA NUMBER(18,6),
PERCENTUAL_META_PROPRIA NUMBER(10,4),
PERCENTUAL_META_FILHOS NUMBER(10,4),
PERCENTUAL_META_EFETIVA NUMBER(10,4),
DESVIO NUMBER(18,6),
PERCENTUAL_ATINGIMENTO NUMBER(18,6),
DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL,
NRO_SEGMENTO NUMBER(24,0),
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_NODO_RES_CONTRIB PRIMARY KEY (ID_RESUMO),
CONSTRAINT UK_TB_FLASH_NODO_RES_CONTRIB UNIQUE (ID_NODO, DATA_REFERENCIA, NRO_SEGMENTO)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_CONTRIB_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ADD CONSTRAINT FK_TB_FLASH_NODO_RES_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,36 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,109 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,117 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_CONTRIBUICAO
WHERE data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final);
INSERT /*+ APPEND */ INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, vlr_contribuicao, vl_ticket_medio,
valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento
)
WITH
hierarquia AS (
SELECT /*+ MATERIALIZE */
CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
),
contribuicao_direta AS (
SELECT /*+ MATERIALIZE */
f.id_nodo,
TRUNC(f.data_referencia) AS data_referencia,
f.ano_referencia, f.mes_referencia, f.dia_referencia,
f.nrosegmento, f.nome_segmento,
SUM(f.nro_tickets) AS nro_tickets,
SUM(f.vlr_imp_contribuicao) AS vlr_imp_contribuicao,
SUM(f.qtde_contribuicao) AS qtde_contribuicao,
SUM(f.vlr_contribuicao) AS vlr_contribuicao
FROM TB_FLASH_FATO_CONTRIBUICAO f
WHERE f.data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final)
GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia, f.nrosegmento, f.nome_segmento
),
contribuicao_hierarquia AS (
SELECT h.id_nodo_ancestral AS id_nodo,
cd.data_referencia, cd.ano_referencia, cd.mes_referencia, cd.dia_referencia,
cd.nrosegmento, cd.nome_segmento,
SUM(cd.nro_tickets) AS nro_tickets,
SUM(cd.vlr_imp_contribuicao) AS vlr_imp_contribuicao,
SUM(cd.qtde_contribuicao) AS qtde_contribuicao,
SUM(cd.vlr_contribuicao) AS vlr_contribuicao
FROM hierarquia h
JOIN contribuicao_direta cd ON cd.id_nodo = h.id_nodo_descendente
GROUP BY h.id_nodo_ancestral, cd.data_referencia, cd.ano_referencia, cd.mes_referencia, cd.dia_referencia, cd.nrosegmento, cd.nome_segmento
),
meta_propria_diaria AS (
SELECT /*+ MATERIALIZE */
m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_CONTRIBUICAO m
WHERE m.data_referencia BETWEEN TRUNC(p_data_inicial) AND TRUNC(p_data_final)
GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia
),
meta_filhos_diaria AS (
SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
base AS (
SELECT DISTINCT n.id_nodo, ch.data_referencia, ch.ano_referencia, ch.mes_referencia, ch.dia_referencia, ch.nrosegmento, ch.nome_segmento
FROM contribuicao_hierarquia ch JOIN TB_FLASH_NODO n ON n.id_nodo = ch.id_nodo
UNION
SELECT DISTINCT n.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, NULL AS nrosegmento, NULL AS nome_segmento
FROM meta_propria_diaria m JOIN TB_FLASH_NODO n ON n.id_nodo = m.id_nodo
),
calculo AS (
SELECT b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
b.nrosegmento, b.nome_segmento,
NVL(ch.nro_tickets, 0) AS nro_tickets,
NVL(ch.vlr_imp_contribuicao, 0) AS vlr_imp_contribuicao,
NVL(ch.qtde_contribuicao, 0) AS qtde_contribuicao,
NVL(ch.vlr_contribuicao, 0) AS vlr_contribuicao,
mpd.valor_meta_propria, mfd.valor_meta_filhos, mpd.percentual_meta_propria,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva
FROM base b
LEFT JOIN contribuicao_hierarquia ch ON ch.id_nodo = b.id_nodo AND ch.data_referencia = b.data_referencia AND ch.nrosegmento = b.nrosegmento
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL,
c.id_nodo, c.data_referencia, c.ano_referencia, c.mes_referencia, c.dia_referencia,
c.nro_tickets, c.vlr_imp_contribuicao, c.qtde_contribuicao, c.vlr_contribuicao,
CASE WHEN c.nro_tickets > 0 THEN c.vlr_contribuicao / c.nro_tickets ELSE NULL END,
c.valor_meta_propria, c.valor_meta_filhos, c.valor_meta_efetiva,
c.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)),
CASE WHEN c.percentual_meta_propria IS NOT NULL THEN c.percentual_meta_propria ELSE NULL END,
c.vlr_contribuicao - NVL(c.valor_meta_efetiva, 0),
CASE WHEN NVL(c.valor_meta_efetiva, 0) = 0 THEN NULL ELSE (c.vlr_contribuicao / c.valor_meta_efetiva) * 100 END,
SYSDATE, c.nrosegmento, c.nome_segmento
FROM calculo c;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO';
END IF;
END;
-- +goose StatementEnd
@@ -1,105 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 DEFAULT NULL
) AS
BEGIN
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
INSERT INTO TB_FLASH_FATO_CONTRIBUICAO (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento
)
WITH
CGOS AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL))) AS CODGERALOPER FROM DUAL CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL),
DIVISOES AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL))) AS NRODIVISAO FROM DUAL CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL),
CATEG AS (
SELECT DC.SEQFAMILIA, DC.NRODIVISAO,
MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN2,
MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.CATEGORIA END) AS CATEGORIAN2,
MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN3,
MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.CATEGORIA END) AS CATEGORIAN3,
MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN4,
MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.CATEGORIA END) AS CATEGORIAN4,
MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN5,
MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.CATEGORIA END) AS CATEGORIAN5
FROM consinco.MAP_FAMDIVCATEG DC
JOIN DIVISOES DI ON DI.NRODIVISAO=DC.NRODIVISAO
JOIN consinco.MAP_CATEGORIA CC ON CC.SEQCATEGORIA=DC.SEQCATEGORIA AND CC.NRODIVISAO=DC.NRODIVISAO AND CC.TIPCATEGORIA='M' AND CC.NIVELHIERARQUIA BETWEEN 2 AND 5
AND ((CC.NIVELHIERARQUIA=2 AND CC.STATUSCATEGOR IN ('A','F') AND DC.STATUS IN ('A','F')) OR (CC.NIVELHIERARQUIA IN (3,4,5) AND CC.STATUSCATEGOR='A' AND DC.STATUS='A'))
GROUP BY DC.SEQFAMILIA, DC.NRODIVISAO
),
NODO_EMPRESA AS (SELECT codigo, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo),
NODO_PRODUTO AS (SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase)
SELECT
SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL,
Z.DTA, EXTRACT(YEAR FROM Z.DTA), EXTRACT(MONTH FROM Z.DTA), EXTRACT(DAY FROM Z.DTA),
TO_NUMBER(TO_CHAR(Z.DTA,'D')),
NP.id_nodo, NE.id_nodo, Z.NROEMPRESA, Z.NOMEEMPRESA, Z.SEQPRODUTO, Z.PRODUTO,
Z.SEQPRODUTOBASE, Z.NRODIVISAO, Z.NROSEGMENTO,
Z.QTDE_VENDA, Z.VLR_IMP_VENDA, Z.QTDE_VENDA, Z.VLRCONTRIB,
CASE WHEN Z.QTDE_VENDA>0 THEN Z.VLRVENDA/Z.QTDE_VENDA ELSE NULL END,
Z.PROPQTDPRODUTOBASE, SYSDATE, Z.DESCSEGMENTO
FROM (
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.4') */
Y.DTAENTRADASAIDA AS DTA, V.NROEMPRESA, E.NOMEREDUZIDO AS NOMEEMPRESA,
V.NROSEGMENTO, seg1.descsegmento, V.NRODIVISAO, V.SEQPRODUTO, A.SEQPRODUTOBASE,
A.DESCCOMPLETA AS PRODUTO,
CC1.SEQCATEGORIA AS SEQCATEGORIAN1, CC1.CATEGORIA AS CATEGORIAN1,
C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3,
C.SEQCATEGORIAN4, C.CATEGORIAN4, C.SEQCATEGORIAN5, C.CATEGORIAN5,
SUM(V.QTDITEM-NVL(V.QTDDEVOLITEM,0)) AS QTDE_VENDA,
SUM(ROUND(V.VLRITEM,2)-ROUND(V.VLRDEVOLITEM,2)) AS VLRVENDA,
SUM(DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDITEM,0,0,(Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDITEM))-DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRDEVOLITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDDEVOLITEM,0,0,(Y.VLRIMPOSTODEVOL-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDDEVOLITEM))+DECODE(V.ACMCOMPRAVENDA,'I',0,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+V.VLRFCPICMS+V.PISITEM+V.COFINSITEM-DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)-V.DVLRFCPICMS-V.PISDEVOLITEM-V.COFINSDEVOLITEM)) AS VLR_IMP_VENDA,
SUM(consinco.fC5_AbcDistribLucratividade('L','L','N',V.VLRITEM,'N',V.VLRICMSST,V.VLRFCPST,V.VLRICMSSTEMPORIG,E.UF,V.UFPESSOA,'S',NULL,'N',V.VLRIPIITEM,V.VLRIPIDEVOLITEM,'N',V.VLRDESCFORANF,Y.CMDIAVLRNF-0,Y.CMDIAIPI,NVL(Y.CMDIACREDPIS,0),NVL(Y.CMDIACREDCOFINS,0),Y.CMDIAICMSST,Y.CMDIADESPNF,Y.CMDIADESPFORANF,Y.CMDIADCTOFORANF,'S',A.PROPQTDPRODUTOBASE,V.QTDITEM,V.VLREMBDESCRESSARCST,V.ACMCOMPRAVENDA,V.PISITEM,V.COFINSITEM,DECODE(V.TIPCGO,'S',Y.QTDVDA,NVL(Y.QTDDEVOL,Y.QTDVDA)),DECODE(V.TIPCGO,'S',Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0),NVL(Y.VLRIMPOSTODEVOL-NVL(V.VLRIPIDEVOLITEM,0),Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))),'N',V.VLRDESPOPERACIONALITEM,Y.VLRDESPESAVDA,'N',NVL(Y.VLRVERBAVDAACR,0),DECODE(V.TIPDOCFISCALCGO,'T',0,Y.QTDVERBAVDA),Y.VLRVERBAVDA-NVL(Y.VLRVERBAVDAINDEVIDA,0),'N',NVL(V.VLRTOTCOMISSAOITEM,0),V.VLRDEVOLITEM,V.VLRDEVOLICMSST,V.DVLRFCPST,V.QTDDEVOLITEM,V.PISDEVOLITEM,V.COFINSDEVOLITEM,V.VLRDESPOPERACIONALITEMDEVOL,V.VLRTOTCOMISSAOITEMDEVOL,E.PERIRLUCRAT,E.PERCSLLLUCRAT,Y.CMDIACREDICMS,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+0,V.VLRFCPICMS,V.PERCPMF,V.PEROUTROIMPOSTO,DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)+0,V.DVLRFCPICMS,CASE WHEN 'N'='N' THEN NVL(Y.CMDIAVLRDESCPISTRANSF,0)+NVL(Y.CMDIAVLRDESCCOFINSTRANSF,0)+NVL(Y.CMDIAVLRDESCICMSTRANSF,0)+NVL(Y.CMDIAVLRDESCIPITRANSF,0)+NVL(Y.CMDIAVLRDESCLUCROTRANSF,0)+NVL(Y.CMDIAVLRDESCVERBATRANSF,0) ELSE 0 END,CASE WHEN DV.UTILACRESCCUSTPRODRELAC='S' AND NVL(A.SEQPRODUTOBASE,A.SEQPRODUTOBASEANTIGO) IS NOT NULL THEN COALESCE(PR.PERCACRESCCUSTORELACVIG,NVL(consinco.F_RETACRESCCUSTORELACABC(V.SEQPRODUTO,V.DTAVDA),1)) ELSE 1 END,'N',0,0,'S',V.VLRDESCMEDALHA,'S',V.VLRDESCFORNEC,V.VLRDESCFORNECDEVOL,'N',V.VLRFRETEITEMRATEIO,V.VLRFRETEITEMRATEIODEV,'S',V.VLRICMSSTEMBUTPROD,V.VLRICMSSTEMBUTPRODDEV,V.VLREMBDESCRESSARCSTDEVOL,CASE WHEN 'N'='S' THEN NVL(V.VLRDESCACORDOVERBAPDV,0) ELSE 0 END,NVL(Y.CMDIACREDIPI,0),NVL(V.VLRITEMRATEIOCTE,0),'N','C',V.VLRIPIPRECOVDA,V.VLRIPIPRECODEVOL,V.VLRDESCMEDALHADEVOL,'N')) AS VLRCONTRIB,
CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT,
CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT,
MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE
FROM consinco.MRL_CUSTODIA Y
JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA=V.DTAVDA
JOIN CGOS CG ON CG.CODGERALOPER=V.CODGERALOPER
JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO=V.SEQPRODUTO
JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO=V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO=Y.SEQPRODUTO
JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA=A.SEQFAMILIA AND D.NRODIVISAO=V.NRODIVISAO
JOIN consinco.MAD_SEGMENTO seg1 ON seg1.NRODIVISAO=D.NRODIVISAO AND seg1.NROSEGMENTO=V.NROSEGMENTO AND seg1.STATUS='A'
JOIN DIVISOES DI ON DI.NRODIVISAO=D.NRODIVISAO
JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA=A.SEQFAMILIA AND K.QTDEMBALAGEM=1
JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA=V.NROEMPRESA AND Y.NROEMPRESA=NVL(E.NROEMPCUSTOABC,E.NROEMPRESA)
JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO=DV.NRODIVISAO
JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO=D.NRODIVISAO AND DC.STATUS='A' AND DC.SEQFAMILIA=D.SEQFAMILIA
JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA=DC.SEQCATEGORIA AND CC1.STATUSCATEGOR IN ('A','F') AND CC1.NIVELHIERARQUIA=1 AND CC1.NRODIVISAO=DC.NRODIVISAO AND CC1.TIPCATEGORIA='M'
LEFT JOIN CATEG C ON C.SEQFAMILIA=A.SEQFAMILIA AND C.NRODIVISAO=V.NRODIVISAO
LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO=V.SEQPRODUTO AND PR.DTAMOVIMENTACAO=V.DTAVDA
WHERE V.NROEMPRESA=p_empresa AND V.DTAVDA>=p_data_inicial AND V.DTAVDA<p_data_final+1
AND ((V.TIPTABELA='S' AND V.CGOACMCOMPRAVENDA IN ('S','I')) OR (V.TIPTABELA<>'S' AND V.ACMCOMPRAVENDA IN ('S','I')))
GROUP BY Y.DTAENTRADASAIDA, V.NROEMPRESA, E.NOMEREDUZIDO, V.NRODIVISAO, V.NROSEGMENTO, SEG1.DESCSEGMENTO,
V.SEQPRODUTO, A.SEQPRODUTOBASE, A.SEQFAMILIA, A.DESCCOMPLETA, CC1.SEQCATEGORIA, CC1.CATEGORIA,
C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3, C.SEQCATEGORIAN4, C.CATEGORIAN4,
C.SEQCATEGORIAN5, C.CATEGORIAN5
) Z
JOIN NODO_EMPRESA NE ON NE.codigo=TO_CHAR(Z.NROEMPRESA)
JOIN NODO_PRODUTO NP ON NP.codigo=TO_CHAR(Z.SEQPRODUTO) AND NP.cod_empresa=Z.NROEMPRESA AND NVL(NP.seqprodutobase,-1)=NVL(Z.SEQPRODUTOBASE,-1);
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_CONTRIBUICAO';
END IF;
END;
-- +goose StatementEnd
@@ -1,71 +0,0 @@
-- +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_empresas IN VARCHAR2 DEFAULT NULL,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 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_EXTERNO AS CODIGO
FROM vitruvio.vi_lojas V
WHERE p_empresas IS NULL
OR CODIGO_EXTERNO IN (
SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL)
FROM dual
CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL
)
ORDER BY CODIGO_EXTERNO
) LOOP
BEGIN
DBMS_OUTPUT.PUT_LINE('Carregando contribuição da empresa: ' || r.codigo);
PRC_FLASH_CARGA_DADOS_CONTRIBUICAO(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final,
p_empresa => r.codigo,
p_divisao => p_divisao,
p_cgos => p_cgos
);
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 user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO';
END IF;
END;
-- +goose StatementEnd
@@ -1,23 +0,0 @@
-- +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
@@ -1,119 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0),
DIA_SEMANA NUMBER(2,0),
ID_NODO NUMBER NOT NULL,
ID_NODO_EMPRESA NUMBER NOT NULL,
COD_EMPRESA NUMBER NOT NULL,
NOME_EMPRESA VARCHAR2(200),
COD_PRODUTO NUMBER NOT NULL,
DESCRICAO_PRODUTO VARCHAR2(300),
SEQPRODUTOBASE NUMBER,
NRODIVISAO NUMBER,
NROSEGMENTO NUMBER,
VLR_CUSTO_PERDA NUMBER(18,6),
QTDE_PERDA NUMBER(18,6),
VLR_PERDA NUMBER(18,6),
PROPQTDPRODUTOBASE NUMBER(18,6),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_FATO_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT PK_TB_FLASH_FATO_PERDA PRIMARY KEY (ID_FATO),
CONSTRAINT UK_TB_FLASH_FATO_PERDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT FK_TB_FLASH_FATO_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_FATO_PERDA_EMP';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT FK_TB_FLASH_FATO_PERDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
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 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
@@ -1,23 +0,0 @@
-- +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
@@ -1,80 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
DATA_ATUALIZACAO DATE,
CONSTRAINT CK_TB_FLASH_META_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_META_PERDA PRIMARY KEY (ID_META),
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_constraints WHERE constraint_name = 'FK_TB_FLASH_META_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_PERDA ADD CONSTRAINT FK_TB_FLASH_META_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,73 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
ORIGEM_META VARCHAR2(100),
DATA_CARGA DATE DEFAULT SYSDATE,
CONSTRAINT CK_TB_FLASH_META_PRD_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_TPAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
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
@@ -1,32 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,87 +0,0 @@
-- +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,0) NOT NULL,
MES_REFERENCIA NUMBER(2,0) NOT NULL,
DIA_REFERENCIA NUMBER(2,0) NOT NULL,
VALOR_VENDA NUMBER(18,6),
VALOR_META_PROPRIA NUMBER(18,6),
VALOR_META_FILHOS NUMBER(18,6),
VALOR_META_EFETIVA NUMBER(18,6),
PERCENTUAL_META_PROPRIA NUMBER(10,4),
PERCENTUAL_META_FILHOS NUMBER(10,4),
PERCENTUAL_META_EFETIVA NUMBER(10,4),
DESVIO NUMBER(18,6),
PERCENTUAL_ATINGIMENTO NUMBER(18,6),
DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL,
NRO_SEGMENTO NUMBER(24,0),
NOME_SEGMENTO VARCHAR2(300),
CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31),
CONSTRAINT PK_TB_FLASH_NODO_RES_PERDA PRIMARY KEY (ID_RESUMO),
CONSTRAINT UK_TB_FLASH_NODO_RES_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'FK_TB_FLASH_NODO_RES_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_PERDA ADD CONSTRAINT FK_TB_FLASH_NODO_RES_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_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
@@ -1,36 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,109 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.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
@@ -1,124 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_RESUMO_PERDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
v_dt_ini DATE := TRUNC(p_data_inicial);
v_dt_fim DATE := TRUNC(p_data_final) + 1;
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_PERDA
WHERE data_referencia >= v_dt_ini
AND data_referencia < v_dt_fim;
INSERT /*+ APPEND */ INTO TB_FLASH_NODO_RESUMO_PERDA (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao, nro_segmento, nome_segmento
)
WITH
hierarquia AS (
SELECT /*+ MATERIALIZE */
CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
),
venda_direta AS (
SELECT f.id_nodo,
TRUNC(f.data_referencia) AS data_referencia,
EXTRACT(YEAR FROM TRUNC(f.data_referencia)) AS ano_referencia,
EXTRACT(MONTH FROM TRUNC(f.data_referencia)) AS mes_referencia,
EXTRACT(DAY FROM TRUNC(f.data_referencia)) AS dia_referencia,
SUM(f.vlr_perda) AS valor_venda,
MAX(f.nrosegmento) AS nro_segmento,
MAX(f.nome_segmento) AS nome_segmento
FROM TB_FLASH_FATO_PERDA f
WHERE f.data_referencia >= v_dt_ini
AND f.data_referencia < v_dt_fim
GROUP BY f.id_nodo, TRUNC(f.data_referencia)
),
venda_hierarquia AS (
SELECT h.id_nodo_ancestral AS id_nodo,
vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia,
SUM(vd.valor_venda) AS valor_venda
FROM hierarquia h
JOIN venda_direta vd ON vd.id_nodo = h.id_nodo_descendente
GROUP BY h.id_nodo_ancestral, vd.data_referencia, vd.ano_referencia, vd.mes_referencia, vd.dia_referencia
),
meta_propria_diaria AS (
SELECT /*+ MATERIALIZE */
m.id_nodo,
TRUNC(m.data_referencia) AS data_referencia,
EXTRACT(YEAR FROM TRUNC(m.data_referencia)) AS ano_referencia,
EXTRACT(MONTH FROM TRUNC(m.data_referencia)) AS mes_referencia,
EXTRACT(DAY FROM TRUNC(m.data_referencia)) AS dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_PERDA m
WHERE m.data_referencia >= v_dt_ini
AND m.data_referencia < v_dt_fim
GROUP BY m.id_nodo, TRUNC(m.data_referencia)
),
meta_filhos_diaria AS (
SELECT pai.id_nodo,
mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
combinado AS (
SELECT
COALESCE(vh.id_nodo, mpd.id_nodo, mfd.id_nodo) AS id_nodo,
COALESCE(vh.data_referencia, mpd.data_referencia, mfd.data_referencia) AS data_referencia,
COALESCE(vh.ano_referencia, mpd.ano_referencia, mfd.ano_referencia) AS ano_referencia,
COALESCE(vh.mes_referencia, mpd.mes_referencia, mfd.mes_referencia) AS mes_referencia,
COALESCE(vh.dia_referencia, mpd.dia_referencia, mfd.dia_referencia) AS dia_referencia,
NVL(vh.valor_venda, 0) AS valor_venda,
mpd.valor_meta_propria,
mpd.percentual_meta_propria,
mfd.valor_meta_filhos,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END AS valor_meta_efetiva
FROM venda_hierarquia vh
FULL OUTER JOIN meta_propria_diaria mpd
ON mpd.id_nodo = vh.id_nodo
AND mpd.data_referencia = vh.data_referencia
FULL OUTER JOIN meta_filhos_diaria mfd
ON mfd.id_nodo = COALESCE(vh.id_nodo, mpd.id_nodo)
AND mfd.data_referencia = COALESCE(vh.data_referencia, mpd.data_referencia)
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_PERDA.NEXTVAL,
c.id_nodo, c.data_referencia, c.ano_referencia, c.mes_referencia, c.dia_referencia,
c.valor_venda,
c.valor_meta_propria,
c.valor_meta_filhos,
c.valor_meta_efetiva,
c.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)) AS percentual_meta_filhos,
c.percentual_meta_propria AS percentual_meta_efetiva,
c.valor_venda - NVL(c.valor_meta_efetiva, 0) AS desvio,
CASE WHEN NVL(c.valor_meta_efetiva, 0) = 0 THEN NULL ELSE c.valor_venda / c.valor_meta_efetiva * 100 END AS percentual_atingimento,
SYSDATE,
vd.nro_segmento,
vd.nome_segmento
FROM combinado c
LEFT JOIN venda_direta vd ON vd.id_nodo = c.id_nodo AND vd.data_referencia = c.data_referencia;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_PERDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,76 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 DEFAULT NULL
) AS
BEGIN
DELETE FROM TB_FLASH_FATO_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
INSERT INTO TB_FLASH_FATO_PERDA (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, qtde_perda, vlr_perda,
propqtdprodutobase, data_cadastro, nome_segmento
)
SELECT
SEQ_TB_FLASH_FATO_PERDA.NEXTVAL,
x.data_referencia, x.ano_referencia, x.mes_referencia, x.dia_referencia, x.dia_semana,
x.id_nodo, x.id_nodo_empresa, x.cod_empresa, x.nome_empresa,
x.cod_produto, x.descricao_produto, x.seqprodutobase, x.nrodivisao, x.nrosegmento,
x.qtde_perda, x.vlr_perda, x.propqtdprodutobase, x.data_cadastro, x.nome_segmento
FROM (
SELECT
TRUNC(a.DTAVDA) AS data_referencia,
EXTRACT(YEAR FROM a.DTAVDA) AS ano_referencia,
EXTRACT(MONTH FROM a.DTAVDA) AS mes_referencia,
EXTRACT(DAY FROM a.DTAVDA) AS dia_referencia,
TO_NUMBER(TO_CHAR(a.DTAVDA,'D')) AS dia_semana,
MIN(b.id_nodo) AS id_nodo,
MIN(c.id_nodo) AS id_nodo_empresa,
b.cod_empresa AS cod_empresa,
MAX(d.fantasia) AS nome_empresa,
a.seqproduto AS cod_produto,
MAX(e.descreduzida) AS descricao_produto,
MAX(e.seqprodutobase) AS seqprodutobase,
MIN(a.nrodivisao) AS nrodivisao,
a.nrosegmento AS nrosegmento,
SUM(a.qtditem) AS qtde_perda,
SUM(a.vlritem) AS vlr_perda,
MAX(e.propqtdprodutobase) AS propqtdprodutobase,
SYSDATE AS data_cadastro,
MAX(seg1.descsegmento) AS nome_segmento
FROM consinco.maxv_abcdistribbase a
INNER JOIN vitruvio.TB_FLASH_NODO b ON b.tipo_nodo = 'PRODUTO' AND b.cod_empresa = a.nroempresa AND b.cod_produto = a.seqproduto
INNER JOIN vitruvio.TB_FLASH_NODO c ON c.tipo_nodo = 'EMPRESA' AND c.cod_empresa = a.nroempresa
INNER JOIN consinco.max_empresa d ON d.nroempresa = c.cod_empresa
INNER JOIN consinco.map_produto e ON e.seqproduto = a.seqproduto
INNER JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = a.nrodivisao AND seg1.nrosegmento = a.nrosegmento
WHERE a.nroempresa = p_empresa
AND a.dtavda BETWEEN p_data_inicial AND p_data_final
AND (p_cgos IS NULL OR a.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL))
AND (p_divisao IS NULL OR a.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL))
GROUP BY TRUNC(a.dtavda), EXTRACT(YEAR FROM a.dtavda), EXTRACT(MONTH FROM a.dtavda),
EXTRACT(DAY FROM a.dtavda), TO_NUMBER(TO_CHAR(a.dtavda,'D')), b.cod_empresa, a.seqproduto, a.nrosegmento
) x;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,71 +0,0 @@
-- +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_empresas IN VARCHAR2 DEFAULT NULL,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 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_EXTERNO AS CODIGO
FROM vitruvio.vi_lojas V
WHERE p_empresas IS NULL
OR CODIGO_EXTERNO IN (
SELECT REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL)
FROM dual
CONNECT BY REGEXP_SUBSTR(p_empresas, '[^,]+', 1, LEVEL) IS NOT NULL
)
ORDER BY CODIGO_EXTERNO
) LOOP
BEGIN
DBMS_OUTPUT.PUT_LINE('Carregando perda da empresa: ' || r.codigo);
PRC_FLASH_CARGA_DADOS_PERDA(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final,
p_empresa => r.codigo,
p_divisao => p_divisao,
p_cgos => p_cgos
);
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 user_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_PERDA_DONO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_ATUALIZA_PERDA_DONO';
END IF;
END;
-- +goose StatementEnd
@@ -85,7 +85,6 @@ BEGIN
FOR r IN ( FOR r IN (
SELECT dv.nrodivisao, SELECT dv.nrodivisao,
seg1.nrosegmento, seg1.nrosegmento,
seg1.descsegmento,
e.nroempresa AS empresa, e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa, e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto, a.seqproduto AS cod_produto,
@@ -121,20 +120,20 @@ BEGIN
(SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda, (SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda,
0 AS vl_ticket_medio, 0 AS vl_ticket_medio,
a.propqtdprodutobase, a.propqtdprodutobase,
( SELECT dc.seqcategoria FROM consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5, ( SELECT 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 consinco.map_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5 ( 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 consinco.maxv_categoria g, consinco.map_famdivcateg u, consinco.map_produto a, consinco.map_famdivisao d, FROM maxv_categoria g, map_famdivcateg u, map_produto a, map_famdivisao d,
consinco.map_famembalagem k, consinco.mad_segmento seg1, consinco.mrl_produtoempresa c, map_famembalagem k, mad_segmento seg1, mrl_produtoempresa c,
consinco.mad_famsegmento h, consinco.max_empresa e, consinco.mrl_custodia y, consinco.mrl_custodia z, mad_famsegmento h, max_empresa e, mrl_custodia y, mrl_custodia z,
consinco.mrlv_descontoregra re, consinco.max_divisao dv, consinco.max_paramgeral pg mrlv_descontoregra re, max_divisao dv, max_paramgeral pg
WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
AND z.nroempresa = p_empresa AND z.nroempresa = p_empresa
AND e.nroempresa = z.nroempresa AND e.nroempresa = z.nroempresa
@@ -167,7 +166,7 @@ BEGIN
AND u.status = 'A' AND u.status = 'A'
AND a.seqproduto = z.seqproduto AND a.seqproduto = z.seqproduto
AND a.seqfamilia = d.seqfamilia AND a.seqfamilia = d.seqfamilia
GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido, GROUP BY dv.nrodivisao, seg1.nrosegmento, e.nroempresa, e.nomereduzido,
a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida,
a.propqtdprodutobase, e.nrodivisao, a.seqfamilia a.propqtdprodutobase, e.nrodivisao, a.seqfamilia
) LOOP ) LOOP
@@ -130,7 +130,7 @@ BEGIN
FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/
TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA,
V.NROEMPRESA, V.NROEMPRESA,
E.FANTASIA AS NOMEEMPRESA, E.NOMEFANTASIA AS NOMEEMPRESA,
V.NROSEGMENTO, V.NROSEGMENTO,
V.NRODIVISAO, V.NRODIVISAO,
V.SEQPRODUTO, V.SEQPRODUTO,
@@ -139,8 +139,8 @@ BEGIN
CC1.SEQCATEGORIA AS SEQCATEGORIAN1, CC1.SEQCATEGORIA AS SEQCATEGORIAN1,
CC1.CATEGORIA AS CATEGORIAN1, CC1.CATEGORIA AS CATEGORIAN1,
( SELECT CC2.SEQCATEGORIA ( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F') AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2 AND CC2.NIVELHIERARQUIA = 2
@@ -151,8 +151,8 @@ BEGIN
AND DC2.STATUS in ('A', 'F') AND DC2.STATUS in ('A', 'F')
) AS SEQCATEGORIAN2, ) AS SEQCATEGORIAN2,
( SELECT CC2.CATEGORIA ( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F') AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2 AND CC2.NIVELHIERARQUIA = 2
@@ -163,8 +163,8 @@ BEGIN
AND DC2.STATUS in ('A', 'F') AND DC2.STATUS in ('A', 'F')
) AS CATEGORIAN2, ) AS CATEGORIAN2,
( SELECT CC2.SEQCATEGORIA ( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3 AND CC2.NIVELHIERARQUIA = 3
@@ -175,8 +175,8 @@ BEGIN
AND DC2.STATUS = 'A' AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN3, ) AS SEQCATEGORIAN3,
( SELECT CC2.CATEGORIA ( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3 AND CC2.NIVELHIERARQUIA = 3
@@ -187,8 +187,8 @@ BEGIN
AND DC2.STATUS = 'A' AND DC2.STATUS = 'A'
) AS CATEGORIAN3, ) AS CATEGORIAN3,
( SELECT CC2.SEQCATEGORIA ( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4 AND CC2.NIVELHIERARQUIA = 4
@@ -199,8 +199,8 @@ BEGIN
AND DC2.STATUS = 'A' AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN4, ) AS SEQCATEGORIAN4,
( SELECT CC2.CATEGORIA ( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4 AND CC2.NIVELHIERARQUIA = 4
@@ -211,8 +211,8 @@ BEGIN
AND DC2.STATUS = 'A' AND DC2.STATUS = 'A'
) AS CATEGORIAN4, ) AS CATEGORIAN4,
( SELECT CC2.SEQCATEGORIA ( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5 AND CC2.NIVELHIERARQUIA = 5
@@ -223,8 +223,8 @@ BEGIN
AND DC2.STATUS = 'A' AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN5, ) AS SEQCATEGORIAN5,
( SELECT CC2.CATEGORIA ( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2 FROM MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2 JOIN MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A' AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5 AND CC2.NIVELHIERARQUIA = 5
@@ -357,24 +357,24 @@ BEGIN
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT
, MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE
FROM consinco.MRL_CUSTODIA Y FROM MRL_CUSTODIA Y
JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA JOIN MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA
JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO JOIN MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO
JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO JOIN 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 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 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 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 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 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' JOIN 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 LEFT JOIN 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 ) 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 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 DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' )
AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final
GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' )
, V.NROEMPRESA , V.NROEMPRESA
, E.FANTASIA , E.NOMEFANTASIA
, V.NRODIVISAO , V.NRODIVISAO
, V.NROSEGMENTO , V.NROSEGMENTO
, V.SEQPRODUTO , V.SEQPRODUTO
@@ -1,866 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
v_contador NUMBER := 0;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT Z.DTA,
Z.NROEMPRESA,
Z.NOMEEMPRESA,
Z.NROSEGMENTO,
Z.NRODIVISAO,
Z.SEQPRODUTO,
Z.SEQPRODUTOBASE,
Z.PRODUTO,
Z.SEQCATEGORIAN1,
Z.CATEGORIAN1,
Z.SEQCATEGORIAN2,
Z.CATEGORIAN2,
Z.SEQCATEGORIAN3,
Z.CATEGORIAN3,
Z.SEQCATEGORIAN4,
Z.CATEGORIAN4,
Z.SEQCATEGORIAN5,
Z.CATEGORIAN5,
Z.VLRVENDA,
(CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY'))
OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN
Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF -
CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0)
FROM MRL_CUSTODIA CD
WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END)
AND CD.NROEMPRESA = 301
AND CD.DTAENTRADASAIDA = (
SELECT MAX(CD1.DTAENTRADASAIDA)
FROM MRL_CUSTODIA CD1
WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO
AND CD1.NROEMPRESA = 301
AND CD1.DTAENTRADASAIDA <= Z.DTA
)
)) - Z.VLR_IMP_VENDA
ELSE
Z.VLRCONTRIB
END) AS VLRCONTRIB,
Z.VLRVENDA_MES_ANT,
Z.VLRCONTRIB_MES_ANT,
Z.VLRVENDA_ANO_ANT,
Z.VLRCONTRIB_ANO_ANT,
Z.QTDE_VENDA,
Z.VLR_IMP_VENDA,
Z.PROPQTDPRODUTOBASE
FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/
TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA,
V.NROEMPRESA,
E.FANTASIA AS NOMEEMPRESA,
V.NROSEGMENTO,
V.NRODIVISAO,
V.SEQPRODUTO,
A.SEQPRODUTOBASE,
A.DESCCOMPLETA PRODUTO,
CC1.SEQCATEGORIA AS SEQCATEGORIAN1,
CC1.CATEGORIA AS CATEGORIAN1,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS in ('A', 'F')
) AS SEQCATEGORIAN2,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS in ('A', 'F')
) AS CATEGORIAN2,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN3,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN3,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN4,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN4,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN5,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN5,
SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA,
SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA,
SUM( DECODE(
V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ),
DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM )
)
- DECODE(
V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ),
DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM )
)
+ DECODE(
V.ACMCOMPRAVENDA, 'I', 0,
DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM )
+ V.VLRFCPICMS + V.PISITEM + V.COFINSITEM -
DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM )
- V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM
)
) AS VLR_IMP_VENDA
, sum(
consinco.fC5_AbcDistribLucratividade(
'L',
'L',
'N',
V.VLRITEM ,
'N',
V.VLRICMSST,
V.VLRFCPST,
V.VLRICMSSTEMPORIG,
E.UF,
V.UFPESSOA,
'S',
null,
'N',
V.VLRIPIITEM,
V.VLRIPIDEVOLITEM,
'N',
V.VLRDESCFORANF,
Y.CMDIAVLRNF - 0 ,
Y.CMDIAIPI,
nvl( Y.CMDIACREDPIS, 0 ),
nvl( Y.CMDIACREDCOFINS, 0 ),
Y.CMDIAICMSST,
Y.CMDIADESPNF,
Y.CMDIADESPFORANF,
Y.CMDIADCTOFORANF,
'S',
a.propqtdprodutobase,
V.QTDITEM,
V.VLREMBDESCRESSARCST,
V.ACMCOMPRAVENDA,
V.PISITEM,
V.COFINSITEM,
decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ),
( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ),
nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ),
Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) ,
'N',
V.VLRDESPOPERACIONALITEM,
Y.VLRDESPESAVDA,
'N',
nvl( Y.VLRVERBAVDAACR, 0 ),
DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ),
Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ),
'N',
NVL(V.VLRTOTCOMISSAOITEM, 0),
V.VLRDEVOLITEM,
VLRDEVOLICMSST,
V.DVLRFCPST,
V.QTDDEVOLITEM,
V.PISDEVOLITEM,
V.COFINSDEVOLITEM,
V.VLRDESPOPERACIONALITEMDEVOL,
V.VLRTOTCOMISSAOITEMDEVOL,
E.PERIRLUCRAT,
E.PERCSLLLUCRAT,
Y.CMDIACREDICMS,
decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM )
+ 0 ,
V.VLRFCPICMS,
V.PERCPMF,
V.PEROUTROIMPOSTO,
decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM )
+ 0 ,
V.DVLRFCPICMS,
case when ( 'N' ) = 'N' then
(nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) +
nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) )
else 0
end,
case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then
coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) )
else 1
end,
'N',
0,
0,
'S',
V.VLRDESCMEDALHA,
'S',
V.VLRDESCFORNEC,
V.VLRDESCFORNECDEVOL,
'N',
V.VLRFRETEITEMRATEIO,
V.VLRFRETEITEMRATEIODEV,
'S',
V.VLRICMSSTEMBUTPROD,
V.VLRICMSSTEMBUTPRODDEV,
V.VLREMBDESCRESSARCSTDEVOL,
case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end,
nvl( Y.CMDIACREDIPI, 0 ),
NVL(V.VLRITEMRATEIOCTE,0),
'N',
'C',
V.VLRIPIPRECOVDA,
V.VLRIPIPRECODEVOL,
V.VLRDESCMEDALHADEVOL,
'N'
)) AS VLRCONTRIB
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT
, MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE
FROM consinco.MRL_CUSTODIA Y
JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA
JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO
JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO
JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO
JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1
JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA )
JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO
JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA
JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M'
LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA
WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 )
AND V.NROEMPRESA = p_empresa
AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' )
AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' )
AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final
GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' )
, V.NROEMPRESA
, E.FANTASIA
, V.NRODIVISAO
, V.NROSEGMENTO
, V.SEQPRODUTO
, A.SEQPRODUTOBASE
, A.SEQFAMILIA
, A.DESCCOMPLETA
, CC1.SEQCATEGORIA
, CC1.CATEGORIA) Z
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA);
IF r.SEQCATEGORIAN1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.SEQCATEGORIAN2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.SEQCATEGORIAN3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.SEQCATEGORIAN4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.SEQCATEGORIAN5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE);
INSERT INTO TB_FLASH_FATO_CONTRIBUICAO (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro
) VALUES (
SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL,
r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA),
TO_NUMBER(TO_CHAR(r.DTA, 'D')),
v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO,
r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA,
r.QTDE_VENDA, r.VLRCONTRIB,
CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END,
r.PROPQTDPRODUTOBASE, SYSDATE
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
v_contador NUMBER := 0;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT Z.DTA,
Z.NROEMPRESA,
Z.NOMEEMPRESA,
Z.NROSEGMENTO,
Z.NRODIVISAO,
Z.SEQPRODUTO,
Z.SEQPRODUTOBASE,
Z.PRODUTO,
Z.SEQCATEGORIAN1,
Z.CATEGORIAN1,
Z.SEQCATEGORIAN2,
Z.CATEGORIAN2,
Z.SEQCATEGORIAN3,
Z.CATEGORIAN3,
Z.SEQCATEGORIAN4,
Z.CATEGORIAN4,
Z.SEQCATEGORIAN5,
Z.CATEGORIAN5,
Z.VLRVENDA,
(CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY'))
OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN
Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF -
CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0)
FROM MRL_CUSTODIA CD
WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END)
AND CD.NROEMPRESA = 301
AND CD.DTAENTRADASAIDA = (
SELECT MAX(CD1.DTAENTRADASAIDA)
FROM MRL_CUSTODIA CD1
WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO
AND CD1.NROEMPRESA = 301
AND CD1.DTAENTRADASAIDA <= Z.DTA
)
)) - Z.VLR_IMP_VENDA
ELSE
Z.VLRCONTRIB
END) AS VLRCONTRIB,
Z.VLRVENDA_MES_ANT,
Z.VLRCONTRIB_MES_ANT,
Z.VLRVENDA_ANO_ANT,
Z.VLRCONTRIB_ANO_ANT,
Z.QTDE_VENDA,
Z.VLR_IMP_VENDA,
Z.PROPQTDPRODUTOBASE
FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/
TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA,
V.NROEMPRESA,
E.FANTASIA AS NOMEEMPRESA,
V.NROSEGMENTO,
V.NRODIVISAO,
V.SEQPRODUTO,
A.SEQPRODUTOBASE,
A.DESCCOMPLETA PRODUTO,
CC1.SEQCATEGORIA AS SEQCATEGORIAN1,
CC1.CATEGORIA AS CATEGORIAN1,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS in ('A', 'F')
) AS SEQCATEGORIAN2,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR in ('A', 'F')
AND CC2.NIVELHIERARQUIA = 2
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS in ('A', 'F')
) AS CATEGORIAN2,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN3,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 3
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN3,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN4,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 4
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN4,
( SELECT CC2.SEQCATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS SEQCATEGORIAN5,
( SELECT CC2.CATEGORIA
FROM consinco.MAP_FAMDIVCATEG DC2
JOIN consinco.MAP_CATEGORIA CC2
ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA
AND CC2.STATUSCATEGOR = 'A'
AND CC2.NIVELHIERARQUIA = 5
AND CC2.NRODIVISAO = DC2.NRODIVISAO
AND CC2.TIPCATEGORIA = 'M'
WHERE DC2.SEQFAMILIA = A.SEQFAMILIA
AND DC2.NRODIVISAO = V.NRODIVISAO
AND DC2.STATUS = 'A'
) AS CATEGORIAN5,
SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA,
SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA,
SUM( DECODE(
V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ),
DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM )
)
- DECODE(
V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ),
DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM )
)
+ DECODE(
V.ACMCOMPRAVENDA, 'I', 0,
DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM )
+ V.VLRFCPICMS + V.PISITEM + V.COFINSITEM -
DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM )
- V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM
)
) AS VLR_IMP_VENDA
, sum(
consinco.fC5_AbcDistribLucratividade(
'L',
'L',
'N',
V.VLRITEM ,
'N',
V.VLRICMSST,
V.VLRFCPST,
V.VLRICMSSTEMPORIG,
E.UF,
V.UFPESSOA,
'S',
null,
'N',
V.VLRIPIITEM,
V.VLRIPIDEVOLITEM,
'N',
V.VLRDESCFORANF,
Y.CMDIAVLRNF - 0 ,
Y.CMDIAIPI,
nvl( Y.CMDIACREDPIS, 0 ),
nvl( Y.CMDIACREDCOFINS, 0 ),
Y.CMDIAICMSST,
Y.CMDIADESPNF,
Y.CMDIADESPFORANF,
Y.CMDIADCTOFORANF,
'S',
a.propqtdprodutobase,
V.QTDITEM,
V.VLREMBDESCRESSARCST,
V.ACMCOMPRAVENDA,
V.PISITEM,
V.COFINSITEM,
decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ),
( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ),
nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ),
Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) ,
'N',
V.VLRDESPOPERACIONALITEM,
Y.VLRDESPESAVDA,
'N',
nvl( Y.VLRVERBAVDAACR, 0 ),
DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ),
Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ),
'N',
NVL(V.VLRTOTCOMISSAOITEM, 0),
V.VLRDEVOLITEM,
VLRDEVOLICMSST,
V.DVLRFCPST,
V.QTDDEVOLITEM,
V.PISDEVOLITEM,
V.COFINSDEVOLITEM,
V.VLRDESPOPERACIONALITEMDEVOL,
V.VLRTOTCOMISSAOITEMDEVOL,
E.PERIRLUCRAT,
E.PERCSLLLUCRAT,
Y.CMDIACREDICMS,
decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM )
+ 0 ,
V.VLRFCPICMS,
V.PERCPMF,
V.PEROUTROIMPOSTO,
decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM )
+ 0 ,
V.DVLRFCPICMS,
case when ( 'N' ) = 'N' then
(nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) +
nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) )
else 0
end,
case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then
coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) )
else 1
end,
'N',
0,
0,
'S',
V.VLRDESCMEDALHA,
'S',
V.VLRDESCFORNEC,
V.VLRDESCFORNECDEVOL,
'N',
V.VLRFRETEITEMRATEIO,
V.VLRFRETEITEMRATEIODEV,
'S',
V.VLRICMSSTEMBUTPROD,
V.VLRICMSSTEMBUTPRODDEV,
V.VLREMBDESCRESSARCSTDEVOL,
case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end,
nvl( Y.CMDIACREDIPI, 0 ),
NVL(V.VLRITEMRATEIOCTE,0),
'N',
'C',
V.VLRIPIPRECOVDA,
V.VLRIPIPRECODEVOL,
V.VLRDESCMEDALHADEVOL,
'N'
)) AS VLRCONTRIB
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT
, CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT
, MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE
FROM consinco.MRL_CUSTODIA Y
JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA
JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO
JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO
JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO
JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1
JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA )
JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO
JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA
JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M'
LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA
WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 )
AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' )
AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' )
AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final
GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' )
, V.NROEMPRESA
, E.FANTASIA
, V.NRODIVISAO
, V.NROSEGMENTO
, V.SEQPRODUTO
, A.SEQPRODUTOBASE
, A.SEQFAMILIA
, A.DESCCOMPLETA
, CC1.SEQCATEGORIA
, CC1.CATEGORIA) Z
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA);
IF r.SEQCATEGORIAN1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.SEQCATEGORIAN2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.SEQCATEGORIAN3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.SEQCATEGORIAN4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.SEQCATEGORIAN5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE);
INSERT INTO TB_FLASH_FATO_CONTRIBUICAO (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro
) VALUES (
SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL,
r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA),
TO_NUMBER(TO_CHAR(r.DTA, 'D')),
v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO,
r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA,
r.QTDE_VENDA, r.VLRCONTRIB,
CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END,
r.PROPQTDPRODUTOBASE, SYSDATE
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
@@ -1,36 +0,0 @@
-- +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
@@ -1,109 +0,0 @@
-- +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
@@ -1,867 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
v_contador NUMBER := 0;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT Z.DTA,
Z.NROEMPRESA,
Z.NOMEEMPRESA,
Z.NROSEGMENTO,
Z.NRODIVISAO,
Z.SEQPRODUTO,
Z.SEQPRODUTOBASE,
Z.PRODUTO,
Z.SEQCATEGORIAN1,
Z.CATEGORIAN1,
Z.SEQCATEGORIAN2,
Z.CATEGORIAN2,
Z.SEQCATEGORIAN3,
Z.CATEGORIAN3,
Z.SEQCATEGORIAN4,
Z.CATEGORIAN4,
Z.SEQCATEGORIAN5,
Z.CATEGORIAN5,
Z.VLRVENDA,
(CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY'))
OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN
Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF -
CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0)
FROM 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
@@ -1,23 +0,0 @@
-- +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
@@ -1,109 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,80 +0,0 @@
-- +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
@@ -1,73 +0,0 @@
-- +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
@@ -1,32 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,85 +0,0 @@
-- +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
@@ -1,36 +0,0 @@
-- +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
@@ -1,109 +0,0 @@
-- +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
@@ -1,107 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
INSERT INTO TB_FLASH_NODO_RESUMO_PERDA (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao
)
WITH datas AS (
SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia
FROM dual
CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final)
),
perda_direta AS (
SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia,
f.ano_referencia, f.mes_referencia, f.dia_referencia,
SUM(f.vlr_perda) AS valor_perda
FROM TB_FLASH_FATO_PERDA f
WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia
),
perda_hierarquia AS (
SELECT a.id_nodo_ancestral AS id_nodo,
d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia,
SUM(NVL(pd.valor_perda, 0)) AS valor_perda
FROM (
SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
) a
CROSS JOIN datas d
LEFT JOIN perda_direta pd
ON pd.id_nodo = a.id_nodo_descendente
AND pd.data_referencia = d.data_referencia
GROUP BY a.id_nodo_ancestral, d.data_referencia
),
meta_propria_diaria AS (
SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_PERDA m
WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia
),
meta_filhos_diaria AS (
SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
base AS (
SELECT n.id_nodo, d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia
FROM TB_FLASH_NODO n
CROSS JOIN datas d
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_PERDA.NEXTVAL,
b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
ph.valor_perda,
mpd.valor_meta_propria,
mfd.valor_meta_filhos,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END,
mpd.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)),
CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END,
NVL(ph.valor_perda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0),
CASE
WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL
ELSE (NVL(ph.valor_perda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100
END,
SYSDATE
FROM base b
LEFT JOIN perda_hierarquia ph ON ph.id_nodo = b.id_nodo AND ph.data_referencia = b.data_referencia
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_PERDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,81 +0,0 @@
-- +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
@@ -1,186 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto,
a.seqprodutobase,
a.desccompleta AS descricao,
d.nrodivisao,
seg1.nrosegmento,
p.dtamovimento AS data_referencia,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'DD')) AS dia,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'MM')) AS mes,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'YYYY')) AS ano,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'D')) AS dia_semana,
SUM(p.qtdperda) AS qtde_perda,
SUM(p.vlrperda) AS vlr_perda,
SUM(p.vlrcustoperda) AS vlr_custo_perda,
a.propqtdprodutobase,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5
FROM max_empresa e
JOIN mar_perda p
ON p.nroempresa = e.nroempresa
JOIN map_produto a
ON a.seqproduto = p.seqproduto
JOIN map_famdivisao d
ON d.seqfamilia = a.seqfamilia
AND d.nrodivisao = e.nrodivisao
JOIN mad_famsegmento h
ON h.seqfamilia = a.seqfamilia
AND h.nrosegmento = e.nrosegmentoprinc
JOIN mad_segmento seg1
ON seg1.nrosegmento = h.nrosegmento
AND seg1.nrodivisao = d.nrodivisao
WHERE p.dtamovimento BETWEEN p_data_inicial AND p_data_final
AND p.nroempresa = p_empresa
GROUP BY e.nroempresa, e.nomereduzido, a.seqproduto, a.seqprodutobase,
a.desccompleta, d.nrodivisao, seg1.nrosegmento, p.dtamovimento,
a.propqtdprodutobase, a.seqfamilia, e.nrodivisao
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa);
IF r.codcatn1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.codcatn2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.codcatn3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.codcatn4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.codcatn5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase);
INSERT INTO TB_FLASH_FATO_PERDA (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, vlr_custo_perda, qtde_perda,
vlr_perda, propqtdprodutobase, data_cadastro
) VALUES (
SEQ_TB_FLASH_FATO_PERDA.NEXTVAL,
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao,
r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.vlr_custo_perda,
r.qtde_perda, r.vlr_perda, r.propqtdprodutobase, SYSDATE
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,24 +0,0 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_FATO_VENDA' AND column_name = 'NOME_SEGMENTO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA ADD (NOME_SEGMENTO VARCHAR2(300))';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_FATO_VENDA.NOME_SEGMENTO IS ''Nome do segmento''';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_FATO_VENDA' AND column_name = 'NOME_SEGMENTO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_VENDA DROP COLUMN NOME_SEGMENTO';
END IF;
END;
-- +goose StatementEnd
@@ -1,432 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
v_contador NUMBER := 0;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_VENDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT dv.nrodivisao,
seg1.nrosegmento,
seg1.descsegmento,
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto,
a.seqprodutobase,
a.desccompleta AS descricao,
z.dtaentradasaida AS data_referencia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'D')) AS dia_semana,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'DD')) AS dia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'MM')) AS mes,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'YYYY')) AS ano,
0 AS nro_tickets,
SUM(DECODE(y.qtdvda, 0, 0,
((y.vlrimpostovda +
NVL(DECODE(pg.indutilicmstaresugprabc,
'S', COALESCE(y.vlricmsvdasolicit, y.vlricmsvda),
y.vlricmsvda), 0)
+ NVL(y.vlrpisvda, 0)
+ NVL(y.vlrcofinsvda, 0)) / y.qtdvda)) * z.qtdvda)
+
SUM(DECODE(NVL(y.qtddevol, 0), 0, 0,
((NVL(y.vlrimpostodevol, 0) +
NVL(DECODE(pg.indutilicmstaresugprabc,
'S',
DECODE(y.qtdvda, 0, 0,
COALESCE((y.vlricmsvdasolicit / y.qtdvda) * y.qtddevol,
y.vlricmsdevol)),
((z.vlricmsvda / GREATEST(z.qtdvda, 1)) * NVL(z.qtddevol, 0))),
0)
+ NVL(y.vlrpisdevol, 0)
+ NVL(y.vlrcofinsdevol, 0)) / y.qtddevol)) * (0 - NVL(z.qtddevol, 0))
) AS vlr_imp_venda,
SUM((z.qtdvda - NVL(z.qtddevol, 0)) / k.qtdembalagem) AS qtde_venda,
(SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda,
0 AS vl_ticket_medio,
a.propqtdprodutobase,
( SELECT dc.seqcategoria FROM 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, seg1.descsegmento, e.nroempresa, e.nomereduzido,
a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida,
a.propqtdprodutobase, e.nrodivisao, a.seqfamilia
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa);
IF r.codcatn1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.codcatn2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.codcatn3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.codcatn4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.codcatn5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase);
INSERT INTO TB_FLASH_FATO_VENDA (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda,
vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento
) VALUES (
SEQ_TB_FLASH_FATO_VENDA.NEXTVAL,
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao,
r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda,
r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE, r.descsegmento
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
v_contador NUMBER := 0;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_VENDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT dv.nrodivisao,
seg1.nrosegmento,
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto,
a.seqprodutobase,
a.desccompleta AS descricao,
z.dtaentradasaida AS data_referencia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'D')) AS dia_semana,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'DD')) AS dia,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'MM')) AS mes,
TO_NUMBER(TO_CHAR(z.dtaentradasaida,'YYYY')) AS ano,
0 AS nro_tickets,
SUM(DECODE(y.qtdvda, 0, 0,
((y.vlrimpostovda +
NVL(DECODE(pg.indutilicmstaresugprabc,
'S', COALESCE(y.vlricmsvdasolicit, y.vlricmsvda),
y.vlricmsvda), 0)
+ NVL(y.vlrpisvda, 0)
+ NVL(y.vlrcofinsvda, 0)) / y.qtdvda)) * z.qtdvda)
+
SUM(DECODE(NVL(y.qtddevol, 0), 0, 0,
((NVL(y.vlrimpostodevol, 0) +
NVL(DECODE(pg.indutilicmstaresugprabc,
'S',
DECODE(y.qtdvda, 0, 0,
COALESCE((y.vlricmsvdasolicit / y.qtdvda) * y.qtddevol,
y.vlricmsdevol)),
((z.vlricmsvda / GREATEST(z.qtdvda, 1)) * NVL(z.qtddevol, 0))),
0)
+ NVL(y.vlrpisdevol, 0)
+ NVL(y.vlrcofinsdevol, 0)) / y.qtddevol)) * (0 - NVL(z.qtddevol, 0))
) AS vlr_imp_venda,
SUM((z.qtdvda - NVL(z.qtddevol, 0)) / k.qtdembalagem) AS qtde_venda,
(SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0))) AS vlr_venda,
0 AS vl_ticket_medio,
a.propqtdprodutobase,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5
FROM maxv_categoria g, map_famdivcateg u, map_produto a, map_famdivisao d,
map_famembalagem k, mad_segmento seg1, mrl_produtoempresa c,
mad_famsegmento h, max_empresa e, mrl_custodia y, mrl_custodia z,
mrlv_descontoregra re, max_divisao dv, max_paramgeral pg
WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
AND z.nroempresa = p_empresa
AND e.nroempresa = z.nroempresa
AND e.nrodivisao = d.nrodivisao
AND z.seqproduto = c.seqproduto
AND e.nroempresa = c.nroempresa
AND y.seqproduto = z.seqproduto
AND y.dtaentradasaida = z.dtaentradasaida
AND y.nroempresa = z.nroempresa
AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0)
AND seg1.nrodivisao = d.nrodivisao
AND h.seqfamilia = z.seqfamilia
AND h.nrosegmento = e.nrosegmentoprinc
AND h.nrosegmento = seg1.nrosegmento
AND d.seqfamilia = z.seqfamilia
AND d.nrodivisao IN (1)
AND dv.nrodivisao = d.nrodivisao
AND k.seqfamilia = h.seqfamilia
AND k.qtdembalagem = 1
AND z.seqproduto = re.seqproduto(+)
AND z.dtaentradasaida = re.datafaturamento(+)
AND z.nroempresa = re.nroempresa(+)
AND g.nrodivisao = u.nrodivisao
AND g.nivelhierarquia = 1
AND g.tipcategoria = 'M'
AND g.statuscategor != 'I'
AND u.seqfamilia = d.seqfamilia
AND u.nrodivisao = d.nrodivisao
AND u.seqcategoria = g.seqcategoria
AND u.status = 'A'
AND a.seqproduto = z.seqproduto
AND a.seqfamilia = d.seqfamilia
GROUP BY dv.nrodivisao, seg1.nrosegmento, e.nroempresa, e.nomereduzido,
a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida,
a.propqtdprodutobase, e.nrodivisao, a.seqfamilia
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa);
IF r.codcatn1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.codcatn2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.codcatn3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.codcatn4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.codcatn5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase);
INSERT INTO TB_FLASH_FATO_VENDA (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_venda, qtde_venda,
vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro
) VALUES (
SEQ_TB_FLASH_FATO_VENDA.NEXTVAL,
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao,
r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda,
r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
@@ -1,45 +0,0 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NRO_SEGMENTO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD (NRO_SEGMENTO NUMBER(24,0))';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_NODO_RESUMO_VENDA.NRO_SEGMENTO IS ''Código do Segmento''';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NOME_SEGMENTO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA ADD (NOME_SEGMENTO VARCHAR2(300))';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_NODO_RESUMO_VENDA.NOME_SEGMENTO IS ''Nome do Segmento''';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NRO_SEGMENTO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA DROP COLUMN NRO_SEGMENTO';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = 'TB_FLASH_NODO_RESUMO_VENDA' AND column_name = 'NOME_SEGMENTO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_VENDA DROP COLUMN NOME_SEGMENTO';
END IF;
END;
-- +goose StatementEnd
@@ -1,113 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_VENDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
INSERT INTO TB_FLASH_NODO_RESUMO_VENDA (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao,
nro_segmento, nome_segmento
)
WITH datas AS (
SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia
FROM dual
CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final)
),
venda_direta AS (
SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia,
f.ano_referencia, f.mes_referencia, f.dia_referencia,
SUM(f.vlr_venda) AS valor_venda,
MAX(f.nrosegmento) AS nro_segmento,
MAX(f.nome_segmento) AS nome_segmento
FROM TB_FLASH_FATO_VENDA f
WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia
),
venda_hierarquia AS (
SELECT a.id_nodo_ancestral AS id_nodo,
d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia,
SUM(NVL(vd.valor_venda, 0)) AS valor_venda
FROM (
SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
) a
CROSS JOIN datas d
LEFT JOIN venda_direta vd
ON vd.id_nodo = a.id_nodo_descendente
AND vd.data_referencia = d.data_referencia
GROUP BY a.id_nodo_ancestral, d.data_referencia
),
meta_propria_diaria AS (
SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_VENDA m
WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia
),
meta_filhos_diaria AS (
SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
base AS (
SELECT n.id_nodo, d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia
FROM TB_FLASH_NODO n
CROSS JOIN datas d
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_VENDA.NEXTVAL,
b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
vh.valor_venda,
mpd.valor_meta_propria,
mfd.valor_meta_filhos,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END,
mpd.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)),
CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END,
NVL(vh.valor_venda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0),
CASE
WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL
ELSE (NVL(vh.valor_venda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100
END,
SYSDATE,
vd.nro_segmento,
vd.nome_segmento
FROM base b
LEFT JOIN venda_hierarquia vh ON vh.id_nodo = b.id_nodo AND vh.data_referencia = b.data_referencia
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia
LEFT JOIN venda_direta vd ON vd.id_nodo = b.id_nodo AND vd.data_referencia = b.data_referencia;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_VENDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_VENDA';
END IF;
END;
-- +goose StatementEnd
@@ -1,91 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_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 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 StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO_DONO';
END IF;
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
+4 -4
View File
@@ -9,16 +9,16 @@
"version": "1.0.0", "version": "1.0.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@davinti/jeff": "^1.0.17" "@davinti/jeff": "^1.0.11"
}, },
"devDependencies": { "devDependencies": {
"tsx": "^4.21.0" "tsx": "^4.21.0"
} }
}, },
"node_modules/@davinti/jeff": { "node_modules/@davinti/jeff": {
"version": "1.0.17", "version": "1.0.11",
"resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.17/jeff-1.0.17.tgz", "resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.11/jeff-1.0.11.tgz",
"integrity": "sha512-xrqCCy4XI6BBgW2ORUaHwaBF1viPdbSYE0a73SGBd5274QSmSKbOhU1cFtP4DPTmP0ajG+/ie5Y65rMMaOMXGA==", "integrity": "sha512-/CJy5RgGRVcjL/YAd7DMmiri5tYcpxpPlb3CaRtW2auimfFaIRk2KRMl5qS07Q8ABVT83Ucay9bXvnqBfNojXg==",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@types/glob": "^8.1.0", "@types/glob": "^8.1.0",
+1 -1
View File
@@ -13,7 +13,7 @@
"license": "ISC", "license": "ISC",
"description": "", "description": "",
"dependencies": { "dependencies": {
"@davinti/jeff": "^1.0.17" "@davinti/jeff": "^1.0.11"
}, },
"devDependencies": { "devDependencies": {
"tsx": "^4.21.0" "tsx": "^4.21.0"
+143 -677
View File
@@ -1,6 +1,6 @@
import { createModuleFactory, createSchedule } from "@davinti/jeff"; import { createModuleFactory } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo", "Verdemar"]); const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]);
export default moduleFactory export default moduleFactory
.createModule({ .createModule({
@@ -8,86 +8,101 @@ export default moduleFactory
description: "Flash de Vendas", description: "Flash de Vendas",
label: "Flash de Vendas", label: "Flash de Vendas",
icon: "bar-chart", icon: "bar-chart",
order: 1,
ai : { ai : {
topics : { topics : {
flash_vendas: { flash_vendas_big : {
descricao: descricao: "Consulta e análise do relatório Flash de Vendas. Permite visualizar metas do mês, vendas do mês atual, variações e projeções, além de comparativos com o mês anterior e ano anterior. Útil para projeção de batimento de meta, ranking de lojas e comparativos de performance.",
"Consulta e análise do relatório Flash de Vendas. Permite visualizar metas do mês, vendas do mês atual, variações e projeções, além de comparativos com o mês anterior e ano anterior. Útil para projeção de batimento de meta, ranking de lojas e comparativos de performance.",
prompt: { prompt: {
prompt_persona: prompt_persona: "Você é um Especialista em Dados e Extrator de Filtros de alto nível. Sua única tarefa é analisar a solicitação do usuário sobre desempenho de vendas (Flash de Vendas), identificar quais informações ele deseja buscar (como data de referência ou loja) e como deseja visualizar esses dados (agrupamento), preparando as variáveis exatas para o sistema de relatórios.",
"Especialista em dados e extrator de filtros para o Flash de Vendas. Analise a solicitação sobre desempenho de vendas, identifique filtros (data, loja) e agrupamento, e preencha o schema.", prompt_tarefa: "1. Identificação de Filtros: Extraia a data de referência (geralmente hoje) e identifique se o usuário quer ver dados de uma loja específica. A fonte de dados apenas suporta filtro de 'data' e 'loja'.\n2. Identificação de Agrupamento: Verifique se o usuário deseja visualizar o total geral (agrupamento vazio) ou agrupar por loja (ex: 'Qual loja está mais distante da meta?'). A query não suporta agrupamentos por divisão, segmento ou categoria.\n3. Identificação do Propósito Analítico:\n - Se perguntar 'Vou bater a meta do mês?', a IA final deverá calcular a média de venda diária (realizado / dias corridos), projetar o fechamento (média * dias do mês), comparar com a meta e exibir o gap.\n - Se perguntar 'Qual loja está mais distante da meta?', a IA final deverá criar um ranking ordenando as lojas pelo percentual de atingimento.\n - Se perguntar comparativos temporais ('mês passado' ou 'ano passado'), a IA final fará o comparativo direto em valor e percentual.",
prompt_tarefa: prompt_regras_gerais: "- Extraia listas de lojas se múltiplas forem solicitadas (ex: 'loja A e loja B').\n- Se não houver solicitação explícita ou implícita de agrupamento por loja, não preencha a chave de agrupamento, mantendo-a vazia.\n- Não invente filtros ou agrupamentos (como divisão, segmento) que não existem na configuração.",
'1. Identifique filtros: extraia data de referência (default: hoje) e lojas se mencionadas. Apenas `data` e `loja` são suportados.\n2. Identifique agrupamento: vazio para total geral, ou "loja" se o usuário pediu ranking/comparação entre lojas.\n3. Identifique o propósito analítico (apenas para contexto, não preencha campo):\n - "Vou bater a meta?" → projeção de fechamento e gap.\n - "Loja mais distante da meta?" → ranking por % de atingimento.\n - Comparativos temporais → mes_anterior ou ano_anterior.', prompt_regras_contexto: "- Nunca analise a mensagem de forma isolada se ela for um refinamento (ex: 'E como foi o ano passado?'). Use o histórico para resgatar os filtros anteriores.\n- Não invente valores para os filtros se não forem fornecidos na conversa.",
prompt_regras_contexto: prompt_exemplos: "*Exemplo 1:*\n- Usuário: 'Vou bater a meta do mês?'\n- Raciocínio: Não há filtro de loja explícito (visão global). Nenhum agrupamento solicitado. A IA apenas extrairá os totais para calcular a projeção e gap com a meta.\n\n*Exemplo 2:*\n- Usuário: 'Qual loja está mais distante da meta?'\n- Raciocínio: Há um pedido implícito de agrupamento por 'loja'. O sistema irá consolidar os dados de todas as lojas para montar o ranking das mais distantes (menor atingimento percentual).\n\n*Exemplo 3:*\n- Usuário: 'Como estamos em relação ao mês passado?'\n- Raciocínio: Nenhuma quebra solicitada, exceto se for contexto anterior. O foco é a comparação de mes_atual vs mes_anterior em valor e percentual.",
'- Refinamentos ("e o ano passado?") → use o histórico para manter filtros anteriores.\n- Não invente valores que não foram informados.', prompt_outras_infos: "Atenção: A query subjacente fornece apenas totalizações gerais ou por loja. Qualquer pedido de quebra por divisão, regional ou segmento não pode ser atendido. A lógica de projeção (diária * total dias), gap de valor e ranking de percentual ficam a cargo do processamento final baseado nas colunas mes_atual, meta_mes, mes_anterior e ano_anterior retornadas.",
prompt_regras_gerais: prompt_saida: "Sua resposta deve ser uma análise detalhada e objetiva dos dados recebidos, apresentando os principais insights de forma clara e concisa."
'- Múltiplas lojas ("loja A e loja B") → extraia como array.\n- Sem solicitação de agrupamento → deixe vazio.\n- Não invente filtros ou agrupamentos fora do schema (divisão, segmento, regional não são suportados).',
prompt_exemplos:
'- "Vou bater a meta do mês?" → sem filtro de loja, sem agrupamento\n- "Qual loja está mais distante da meta?" → agrupamento: "loja"\n- "Como estamos em relação ao mês passado?" → sem agrupamento (comparativo temporal direto)\n- "Como foi a loja Centro e Shopping?" → loja: ["Centro", "Shopping"]',
prompt_outras_infos:
"A query retorna colunas: mes_atual, meta_mes, mes_anterior, ano_anterior. Apenas totalizações gerais ou por loja são suportadas.",
prompt_saida:
"Sua resposta deve ser uma análise detalhada e objetiva dos dados recebidos, apresentando os principais insights de forma clara e concisa.",
}, },
json_params_saida: { json_params_saida: {
agrupamentos: [ agrupamentos: [
{ {
nome_parametro: "loja", "nome_parametro": "loja",
coluna_vtr: "x.codigo", coluna_vtr: "x.codigo"
}, }
], ],
filtros: { filtros: {
data_venda: { data_venda: {
descricao_agente: descricao_agente: "A data base para a consulta das vendas. Caso não informada explicitamente, usar a data de hoje no formato YYYY-MM-DD.",
"A data base para a consulta das vendas. Caso não informada explicitamente, usar a data de hoje no formato YYYY-MM-DD.", coluna_vtr: "args.data_venda",
nome_parametro: "data_venda", tabela_rag: " "
}, },
loja: { loja: {
descricao_agente: descricao_agente: "Lista de nomes ou códigos de lojas mencionados para filtragem.",
"Lista de nomes ou códigos de lojas mencionados para filtragem.",
coluna_vtr: "x.nomeempresaapp", coluna_vtr: "x.nomeempresaapp",
tabela_rag: "tb_flash_nodo", tabela_rag: "tb_flash_nodo"
}, }
}, }
}, }/*,
query_base: "flash_vendas_ai", sql: `SELECT
}, ${agrupamento} AS KEY_FIELD,
sem_assunto: { SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
descricao: "Fluxo a ser seguido quando não houver assunto definido", SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
prompt: { SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
prompt_persona: "", CASE
prompt_tarefa: "", WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
prompt_regras_contexto: "", ELSE ROUND(
prompt_regras_gerais: "", ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
prompt_exemplos: "", SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
prompt_outras_infos: "", , 2)
prompt_saida: "Responda que não conseguiu identificar o assunto de maneira amigável e mostre os assuntos disponíveis para consulta.", END AS variacao_atual,
}, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
json_params_saida: { SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
agrupamentos: [], SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
filtros: {}, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
}, CASE
query_base: "query_vazia" WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
}, ELSE ROUND(
agendamento: { ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
descricao: "Esse fluxo deverá ser usado para agendar perguntas no sistema interno.\n- Permite criar novos agendamentos\n- Alterar agendamentos existentes\n- Listar os agendamentos do usuário", SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
prompt: { , 2)
prompt_persona: "Assistente de Agendamento Inteligente do Vitruvio. \nInterpreta a intenção do usuário para criar, listar ou modificar agendamentos. \nSe o usuário for genérico ou estiver em dúvida, oriente com exemplos práticos.", END AS variacao_mes_anterior,
prompt_tarefa: "Interpretação da Ação:\n- CREATE: usuário quer agendar algo novo ('me lembre', 'agende', 'rode toda segunda').\n- READ: usuário quer ver agendamentos existentes OU pergunta o que você faz.\n- UPDATE: usuário quer alterar, pausar ou cancelar um agendamento existente.\n\nExtração:\n- Pergunta: dúvida limpa, sem comandos tipo 'Agende para mim'.\n- Horario: data/hora da 1ª execução. Use a data atual como referência para termos relativos (amanhã, próxima sexta).\n Se recorrência diária/semanal e a hora já passou hoje, agende para o próximo dia/semana no mesmo horário.\n\nMensagem de Confirmação:\n- CREATE: 'Já agendei para *[QUANDO]* para retornar sobre *[PERGUNTA]*.' Converta data para 'DD/MM/YYYY às HH:mm' e traduza a recorrência.\n- READ: a lista do usuário vem em OUTRAS INFORMAÇÕES. Apresente em tópicos.\n Se vazia: 'Você não possui nenhum agendamento ativo no momento.'\n Se o usuário perguntou o que você faz: explique e dê 1 exemplo de uso.\n- UPDATE: confirme alteração/cancelamento.", SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
prompt_regras_contexto: "", SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
prompt_regras_gerais: "", SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
prompt_exemplos: "Tipo e Parâmetro:\n- 'Toda segunda' → S, '2'\n- 'Toda sexta e quarta' → S, '6;4'\n- 'A cada 2 horas' → I, '120'\n- 'Todo dia 5' → M, '5'\n- 'Diariamente' → D, ''\n- 'Amanhã às 14h' → U, ''\n\nInterações:\n- 'Me avise toda segunda às 9h sobre a ruptura'\n → CREATE, Tipo: S, Param: '2', Horario: próxima segunda 09:00\n → 'Tudo certo! Agendei para todas as *segundas-feiras às 09:00* sobre *ruptura*.'\n\n- 'O que você faz?'\n → READ\n → 'Olá! Cuido dos seus agendamentos automáticos. Posso criar, listar ou cancelar.\n\nTente: *Me lembre das vendas todo dia às 18:00.*'", SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
prompt_outras_infos: "Agendamentos do Usuário : :lista_agendamentos_usuario", CASE
prompt_saida: "" WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
}, ELSE ROUND(
json_params_saida: { ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
agrupamentos: [], SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
filtros: {}, , 2)
}, END AS variacao_ano_anterior
query_base: "query_vazia" FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
n.codigo || ' - ' || n.nome AS loja_formatada,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo
WHERE n.tipo_nodo = 'EMPRESA'
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY ${agrupamento}
ORDER BY mes_atual DESC`*/
}
} }
},
}, },
queries: { queries: {
flash: { flash: {
@@ -228,20 +243,6 @@ export default moduleFactory
}, },
params: ["data_venda", "codigo_categoria_pai", "cod_empresa"], params: ["data_venda", "codigo_categoria_pai", "cod_empresa"],
}, },
flash_vendas_ai: {
name: " Flash de vendas AI",
display: {
type: "none",
},
params: ["data_venda", "agrupamento"],
},
query_vazia: {
name: "Query Vazia",
display: {
type: "none",
},
params: [],
}
}, },
entrypoint: "flash" as "flash" | "flash_categorias", entrypoint: "flash" as "flash" | "flash_categorias",
}) })
@@ -250,340 +251,56 @@ export default moduleFactory
flash: (args) => { flash: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT select
'Lojas' AS canalapp, tes.canalapp,
x.codigo AS cod_empresa, tes.nomeempresaapp,
x.nomeempresaapp AS nomeempresaapp, grouping(tes.canalapp) is_total,
CASE sum(tvf.vlrvendadia) venda_dia,
WHEN GROUPING(x.codigo) = 1 THEN 1 sum(tvf.vlrmetames) meta_mes,
ELSE 0 sum(tvf.vlrvendaacumulada) vda,
END AS is_total, sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes, sum(tvf.vlrmetadia) meta_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - sum(tvf.qtdclientes) qtd_clientes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS dif_mes_atual, round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
CASE round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0 from mboard.tb_venda_flash tvf
ELSE ROUND( inner join mboard.tb_empresa_segmento tes
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / on tes.nroempresa = tvf.nroempresa
(SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02)) * 100) - 100 and tes.nrodivisao = tvf.nrodivisao
, 2) and tes.nrosegmento = tvf.nrosegmento
END AS variacao_atual, and tes.codcanal = tvf.codcanal
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior, where 1=1
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, and tvf.vlrvendaacumulada > 0
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - and tvf.dtavda = TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
CASE group by rollup(canalapp, nomeempresaapp)
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM
tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n
ON
n.id_nodo = r.id_nodo
WHERE
n.tipo_nodo = 'EMPRESA'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp),
()
)
`,
}; };
}, },
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
WITH params AS ( select
SELECT 'Categorias' as categoriaapp,
TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS data_venda, 1 as is_total,
${args.codigo_categoria_pai} AS codigo_categoria_pai, 0 as venda_dia,
${args.cod_empresa} AS cod_empresa 0 as meta_mes,
FROM dual 0 as mes_atual,
), 0 as dif_mes_atual,
nodo_pai_param AS ( 0 as variacao_atual,
SELECT n.* 0 as mes_anterior,
FROM tb_flash_nodo n 0 as dif_mes_anterior,
CROSS JOIN params p 0 as variacao_mes_anterior,
WHERE p.codigo_categoria_pai IS NOT NULL 0 as ano_anterior,
AND n.tipo_nodo = 'CATEGORIA' 0 as dif_ano_anterior,
AND n.codigo = p.codigo_categoria_pai 0 as variacao_ano_anterior
and (n.cod_empresa in (${args.ctx_user_companies_for_module})) from dual
AND ( where 1 = 0`,
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
),
nodos_filtrados AS (
SELECT filho.*
FROM tb_flash_nodo filho
JOIN nodo_pai_param pai_param
ON pai_param.id_nodo = filho.id_nodo_pai
CROSS JOIN params p
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
AND filho.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR filho.cod_empresa = p.cod_empresa
)
UNION ALL
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.ativo = 'S'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
AND n.nivel = (
SELECT MIN(n2.nivel)
FROM tb_flash_nodo n2
WHERE n2.tipo_nodo = 'CATEGORIA'
AND n2.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR n2.cod_empresa = p.cod_empresa
)
)
)
SELECT
x.tipo_nodo AS canalapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp,
CASE
WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0
END AS is_total,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
(SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02)
) * 100
) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)
) * 100
) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)
) * 100
) - 100
, 2)
END AS variacao_ano_anterior
FROM (
SELECT
cat.codigo AS codigo,
cat.nome AS nomeempresaapp,
cat.tipo_nodo,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1)
AND ADD_MONTHS(p.data_venda, -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12)
AND ADD_MONTHS(p.data_venda, -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN nodos_filtrados cat
ON cat.id_nodo = r.id_nodo
CROSS JOIN params p
WHERE (
r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1)
AND ADD_MONTHS(p.data_venda, -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12)
AND ADD_MONTHS(p.data_venda, -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
}; };
}, },
flash_vendas_ai: (args) => {
return {
sql: /*sql*/ `
SELECT
${args.agrupamento} AS KEY_FIELD,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
n.codigo || ' - ' || n.nome AS loja_formatada,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo
WHERE n.tipo_nodo = 'EMPRESA'
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY ${args.agrupamento}
ORDER BY mes_atual DESC
`,
};
}, },
query_vazia: (args)=> { C5_big: {flash: (args) => {
return {
sql: /*sql*/``
}
},
},
C5_big: {
flash: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT SELECT
@@ -664,8 +381,7 @@ export default moduleFactory
(x.codigo, x.nomeempresaapp), (x.codigo, x.nomeempresaapp),
() ()
) )
`, `,};
};
}, },
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
@@ -841,278 +557,42 @@ export default moduleFactory
ORDER BY ORDER BY
is_total, is_total,
nomeempresaapp nomeempresaapp
`, `,};
};
}, },
flash_vendas_ai: (args) => { },
C5_mambo: {flash: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ ``,};
SELECT
${args.agrupamento} AS KEY_FIELD,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
n.codigo || ' - ' || n.nome AS loja_formatada,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo
WHERE n.tipo_nodo = 'EMPRESA'
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY ${args.agrupamento}
ORDER BY mes_atual DESC
`,
};
},
query_vazia: (args)=> {
return {
sql: /*sql*/``
}
},
},
C5_mambo: {
flash: (args) => {
return {
sql: /*sql*/ `
select
tes.canalapp,
tes.nomeempresaapp,
grouping(tes.canalapp) is_total,
sum(tvf.vlrvendadia) venda_dia,
sum(tvf.vlrmetames) meta_mes,
sum(tvf.vlrvendaacumulada) vda,
sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
sum(tvf.vlrmetadia) meta_dia,
round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
sum(tvf.qtdclientes) qtd_clientes,
round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
from mboard.tb_venda_flash tvf
inner join mboard.tb_empresa_segmento tes
on tes.nroempresa = tvf.nroempresa
and tes.nrodivisao = tvf.nrodivisao
and tes.nrosegmento = tvf.nrosegmento
and tes.codcanal = tvf.codcanal
where 1=1
and tvf.vlrvendaacumulada > 0
and tvf.dtavda = TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
group by rollup(canalapp, nomeempresaapp)
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
};
}, },
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ ``,};
select
'Categorias' as categoriaapp,
1 as is_total,
0 as venda_dia,
0 as meta_mes,
0 as mes_atual,
0 as dif_mes_atual,
0 as variacao_atual,
0 as mes_anterior,
0 as dif_mes_anterior,
0 as variacao_mes_anterior,
0 as ano_anterior,
0 as dif_ano_anterior,
0 as variacao_ano_anterior
from dual
where 1 = 0`,
};
},
flash_vendas_ai: (args) => {
return {
sql: /*sql*/ ``,
};
},
query_vazia: (args)=> {
return {
sql: /*sql*/``
}
}, },
}, },
Verdemar:{ }).withSchedules({
flash: (args) => {
return {
sql: /*sql*/`
WITH Parametros AS (
SELECT
TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref,
TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AS dt_inicio_mes,
ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AS dt_inicio_mes_ant,
ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) AS dt_fim_mes_ant,
ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AS dt_inicio_ano_ant,
ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) AS dt_fim_ano_ant
FROM DUAL
),
Vendas AS (
-- Venda diaria por loja (lê só os nos EMPRESA do resumo, que já vem com rollup)
SELECT n.cod_empresa AS loja,
r.data_referencia AS data,
r.valor_venda AS venda,
0 AS meta
FROM VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r
JOIN VERDEMAR.TB_FLASH_NODO n ON n.id_nodo = r.id_nodo
CROSS JOIN Parametros p
WHERE n.tipo_nodo = 'EMPRESA'
AND n.ativo = 'S'
AND ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref
OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant
OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant)
),
Metas AS (
-- Metas em tempo real, igual antes
SELECT FNC_CODIGOLOJA(m.loja_ajustada) AS loja,
m.data,
0 AS venda,
m.meta_diaria AS meta
FROM VERDEMAR.ORCADO_METAS_IMPORT m
CROSS JOIN Parametros p
WHERE m.data BETWEEN p.dt_inicio_mes AND LAST_DAY(p.dt_ref)
),
DadosUnificados AS (
SELECT * FROM Vendas
UNION ALL
SELECT * FROM Metas
),
Agrupado AS (
SELECT
d.loja,
SUM(CASE WHEN d.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN d.venda ELSE 0 END) AS v_mes,
SUM(CASE WHEN d.data BETWEEN p.dt_inicio_mes AND LAST_DAY(p.dt_ref) THEN d.meta ELSE 0 END) AS m_mes,
SUM(CASE WHEN d.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN d.venda ELSE 0 END) AS v_mes_ant,
SUM(CASE WHEN d.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN d.venda ELSE 0 END) AS v_ano_ant
FROM DadosUnificados d
CROSS JOIN Parametros p
GROUP BY d.loja
)
SELECT
'Lojas' AS canalapp,
FNC_NUMEROLOJA(loja) AS cod_empresa,
FNC_NOMEPESSOAS(loja) AS nomeempresaapp,
GROUPING(loja) AS is_total,
-- Calculos
SUM(m_mes) AS meta_mes,
SUM(v_mes) AS mes_atual,
SUM(v_mes) - SUM(m_mes) AS dif_mes_atual,
ROUND(NVL((SUM(v_mes) / NULLIF(SUM(m_mes), 0)) * 100 - 100, 0), 2) AS variacao_atual,
SUM(v_mes_ant) AS mes_anterior,
SUM(v_mes) - SUM(v_mes_ant) AS dif_mes_anterior,
ROUND(NVL((SUM(v_mes) / NULLIF(SUM(v_mes_ant), 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior,
SUM(v_ano_ant) AS ano_anterior,
SUM(v_mes) - SUM(v_ano_ant) AS dif_ano_anterior,
ROUND(NVL((SUM(v_mes) / NULLIF(SUM(v_ano_ant), 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior
FROM Agrupado
GROUP BY GROUPING SETS ((loja), ())
`
}
},
flash_categorias: (args) => {
return {
sql: /*sql*/``
}
},
flash_vendas_ai: (args) => {
return {
sql: /*sql*/``
}
},
query_vazia : (args) => {
return {
sql: /*sql*/``
}
}
}
})
.withSchedules({
C5: [ C5: [
createSchedule({ {
name: "Procedure que atualiza os dados do flash de vendas", name: "Procedure que atualiza os dados do flash",
params: ["vendas_empresas", "vendas_divisao", "vendas_cgos", "vendas_dias_atualizacao"], command: /*sql*/ `BEGIN
command: (args) => ({ END`,
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_VENDA_DONO(
p_data_inicial => TRUNC(SYSDATE) - ${args.vendas_dias_atualizacao},
p_data_final => TRUNC(SYSDATE),
p_empresas => ${args.vendas_empresas},
p_divisao => ${args.vendas_divisao},
p_cgos => ${args.vendas_cgos}
);
END;`,
}),
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}), },
], ],
C5_big: [ C5_big: [
createSchedule({ {
name: "Procedure que atualiza os dados do flash de vendas", name: "Procedure que atualiza os dados do flash",
params: ["divisao", "cgos"], command: /*sql*/ `BEGIN
command: (params) => ({
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_VENDA_DONO( PRC_FLASH_ATUALIZA_VENDA_DONO(
p_data_inicial => TRUNC(SYSDATE) - 30, p_data_inicial => TRUNC(SYSDATE) - 30,
p_data_final => TRUNC(SYSDATE), p_data_final => TRUNC(SYSDATE),
p_empresa_ini => 1, p_empresa_ini => 1,
p_empresa_fim => 10, p_empresa_fim => 10
p_divisao => ${params.divisao},
p_cgos => ${params.cgos}
); );
END;`, END`,
}),
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}), },
], ],
C5_mambo: [ C5_mambo: [
{ {
@@ -1123,18 +603,4 @@ where 1 = 0`,
timeout_seconds: 2400, timeout_seconds: 2400,
}, },
], ],
Verdemar: [
{
name: 'Procedure que atualiza os dados do flash',
command: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_VENDA(
p_data_inicial => TRUNC(SYSDATE) -1,
p_data_final => TRUNC(SYSDATE)
);
END;`,
cron: "0 */2 * * *",
timeout_seconds: 2400,
}
]
}); });
@@ -1,4 +1,4 @@
import { createModuleFactory, createSchedule } from "@davinti/jeff"; import { createModuleFactory } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]); const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]);
@@ -8,7 +8,6 @@ export default moduleFactory
description: "Flash de Contribuição", description: "Flash de Contribuição",
label: "Flash de Contribuição", label: "Flash de Contribuição",
icon: "bar-chart", icon: "bar-chart",
order: 2,
queries: { queries: {
flashContribuicao: { flashContribuicao: {
name: "Flash de Contribuição", name: "Flash de Contribuição",
@@ -79,306 +78,14 @@ export default moduleFactory
}, },
params: ["data_contribuicao"], params: ["data_contribuicao"],
}, },
flash_categorias: {
name: "Flash de Contribuição por Categorias",
display: {
type: "flash",
settings: {
group_column: "categoriaapp",
total_indicator_column: "is_total",
null_label_key: "Geral",
}, },
header: { entrypoint: "flashContribuicao",
title_column: "categoriaapp",
value_column: "contribuicao_dia",
value_format: "currency",
},
rows: [
{
label: "Meta Mês",
column: "meta_mes",
format: "currency_short",
},
{
label: "Mês Atual",
column: "mes_atual",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_atual",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_atual",
format: "percentage",
},
{
label: "Mês Anterior",
column: "mes_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_mes_anterior",
format: "percentage",
},
{
label: "Ano Anterior",
column: "ano_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_ano_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_ano_anterior",
format: "percentage",
},
],
},
params: ["data_contribuicao", "codigo_categoria_pai", "cod_empresa"],
},
},
entrypoint: "flashContribuicao" as "flashContribuicao" | "flash_categorias",
}) })
.withImplementations({ .withImplementations({
C5: { C5: {
flashContribuicao: (args) => { flashContribuicao: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ ``,
SELECT
'Lojas' AS categoriaapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp,
CASE
WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0
END AS is_total,
SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.vlr_contribuicao ELSE 0 END) AS contribuicao_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
r.data_referencia,
r.valor_meta_efetiva,
r.vlr_contribuicao,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD')
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM
tb_flash_nodo_resumo_contribuicao r
JOIN tb_flash_nodo n
ON
n.id_nodo = r.id_nodo
WHERE
n.tipo_nodo = 'EMPRESA'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp),
()
)
`,
};
},
flash_categorias: (args) => {
return {
sql: /*sql*/ `
WITH params AS (
SELECT
TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') AS data_contribuicao,
${args.codigo_categoria_pai} AS codigo_categoria_pai,
${args.cod_empresa} AS cod_empresa
FROM dual
),
nodo_pai_param AS (
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NOT NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.codigo = p.codigo_categoria_pai
AND (n.cod_empresa IN (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
),
nodos_filtrados AS (
SELECT filho.*
FROM tb_flash_nodo filho
JOIN nodo_pai_param pai_param
ON pai_param.id_nodo = filho.id_nodo_pai
CROSS JOIN params p
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
AND filho.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR filho.cod_empresa = p.cod_empresa
)
UNION ALL
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.ativo = 'S'
AND (n.cod_empresa IN (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
AND n.nivel = (
SELECT MIN(n2.nivel)
FROM tb_flash_nodo n2
WHERE n2.tipo_nodo = 'CATEGORIA'
AND n2.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR n2.cod_empresa = p.cod_empresa
)
)
)
SELECT
x.tipo_nodo AS categoriaapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp,
CASE
WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0
END AS is_total,
SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.vlr_contribuicao ELSE 0 END) AS contribuicao_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM (
SELECT
cat.codigo AS codigo,
cat.nome AS nomeempresaapp,
cat.tipo_nodo,
r.data_referencia,
r.valor_meta_efetiva,
r.vlr_contribuicao,
CASE
WHEN r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1)
AND ADD_MONTHS(p.data_contribuicao, -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12)
AND ADD_MONTHS(p.data_contribuicao, -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_contribuicao r
JOIN nodos_filtrados cat
ON cat.id_nodo = r.id_nodo
CROSS JOIN params p
WHERE (
r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1)
AND ADD_MONTHS(p.data_contribuicao, -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12)
AND ADD_MONTHS(p.data_contribuicao, -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
}; };
}, },
}, },
@@ -387,44 +94,44 @@ export default moduleFactory
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT SELECT
'Lojas' AS categoriaapp, 'Lojas' AS canalapp,
x.codigo AS cod_empresa, x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp, x.nomeempresaapp AS nomeempresaapp,
CASE CASE
WHEN GROUPING(x.codigo) = 1 THEN 1 WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0 ELSE 0
END AS is_total, END AS is_total,
SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.vlr_contribuicao ELSE 0 END) AS contribuicao_dia, SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.valor_contribuicao ELSE 0 END) AS contribuicao_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) AS mes_atual, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND( ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100 SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2) , 2)
END AS variacao_atual, END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS mes_anterior, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_mes_anterior, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_mes_anterior,
CASE CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0 WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND( ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100 SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END)) * 100) - 100
, 2) , 2)
END AS variacao_mes_anterior, END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS ano_anterior, SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_ano_anterior, SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_ano_anterior,
CASE CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0 WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND( ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) / ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100 SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END)) * 100) - 100
, 2) , 2)
END AS variacao_ano_anterior END AS variacao_ano_anterior
FROM FROM
@@ -434,7 +141,7 @@ export default moduleFactory
n.nome AS nomeempresaapp, n.nome AS nomeempresaapp,
r.data_referencia, r.data_referencia,
r.valor_meta_efetiva, r.valor_meta_efetiva,
r.vlr_contribuicao, r.valor_contribuicao,
CASE CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD')
THEN 'ATUAL' THEN 'ATUAL'
@@ -469,148 +176,6 @@ export default moduleFactory
`, `,
}; };
}, },
flash_categorias: (args) => {
return {
sql: /*sql*/ `
WITH params AS (
SELECT
TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') AS data_contribuicao,
${args.codigo_categoria_pai} AS codigo_categoria_pai,
${args.cod_empresa} AS cod_empresa
FROM dual
),
nodo_pai_param AS (
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NOT NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.codigo = p.codigo_categoria_pai
AND (n.cod_empresa IN (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
),
nodos_filtrados AS (
SELECT filho.*
FROM tb_flash_nodo filho
JOIN nodo_pai_param pai_param
ON pai_param.id_nodo = filho.id_nodo_pai
CROSS JOIN params p
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
AND filho.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR filho.cod_empresa = p.cod_empresa
)
UNION ALL
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.ativo = 'S'
AND (n.cod_empresa IN (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
AND n.nivel = (
SELECT MIN(n2.nivel)
FROM tb_flash_nodo n2
WHERE n2.tipo_nodo = 'CATEGORIA'
AND n2.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR n2.cod_empresa = p.cod_empresa
)
)
)
SELECT
x.tipo_nodo AS categoriaapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp,
CASE
WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0
END AS is_total,
SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.vlr_contribuicao ELSE 0 END) AS contribuicao_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.vlr_contribuicao ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.vlr_contribuicao ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM (
SELECT
cat.codigo AS codigo,
cat.nome AS nomeempresaapp,
cat.tipo_nodo,
r.data_referencia,
r.valor_meta_efetiva,
r.vlr_contribuicao,
CASE
WHEN r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1)
AND ADD_MONTHS(p.data_contribuicao, -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12)
AND ADD_MONTHS(p.data_contribuicao, -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_contribuicao r
JOIN nodos_filtrados cat
ON cat.id_nodo = r.id_nodo
CROSS JOIN params p
WHERE (
r.data_referencia BETWEEN TRUNC(p.data_contribuicao, 'MM') AND p.data_contribuicao
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -1)
AND ADD_MONTHS(p.data_contribuicao, -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_contribuicao, 'MM'), -12)
AND ADD_MONTHS(p.data_contribuicao, -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
};
},
}, },
C5_mambo: { C5_mambo: {
flashContribuicao: (args) => { flashContribuicao: (args) => {
@@ -618,31 +183,16 @@ export default moduleFactory
sql: /*sql*/ ``, sql: /*sql*/ ``,
}; };
}, },
flash_categorias: (args) => {
return {
sql: /*sql*/ ``,
};
},
}, },
}).withSchedules({ }).withSchedules({
C5: [ C5: [
createSchedule({ {
name: "Procedure que atualiza os dados do flash de Contribuição", name: "Procedure que atualiza os dados do flash de contribuição",
params: ["contribuicao_empresas", "contribuicao_divisao", "contribuicao_cgos", "contribuicao_dias_atualizacao"], command: /*sql*/ `BEGIN
command: (args) => ({ END`,
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO(
p_data_inicial => TRUNC(SYSDATE) - ${args.contribuicao_dias_atualizacao},
p_data_final => TRUNC(SYSDATE),
p_empresas => ${args.contribuicao_empresas},
p_divisao => ${args.contribuicao_divisao},
p_cgos => ${args.contribuicao_cgos}
);
END;`,
}),
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}), },
], ],
C5_big: [ C5_big: [
{ {
@@ -654,7 +204,7 @@ export default moduleFactory
p_empresa_ini => 1, p_empresa_ini => 1,
p_empresa_fim => 10 p_empresa_fim => 10
); );
END;`, END`,
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}, },
+52 -321
View File
@@ -1,4 +1,4 @@
import { createModuleFactory, createSchedule } from "@davinti/jeff"; import { createModuleFactory } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]); const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]);
@@ -8,7 +8,6 @@ export default moduleFactory
description: "Flash de Perdas", description: "Flash de Perdas",
label: "Flash de Perdas", label: "Flash de Perdas",
icon: "bar-chart", icon: "bar-chart",
order: 3,
queries: { queries: {
flashPerdas: { flashPerdas: {
name: "Flash de Perdas", name: "Flash de Perdas",
@@ -156,265 +155,52 @@ export default moduleFactory
flashPerdas: (args) => { flashPerdas: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT select
'Lojas' AS categoriaapp, tes.canalapp,
x.codigo AS cod_empresa, tes.nomeempresaapp,
x.nomeempresaapp AS nomeempresaapp, grouping(tes.canalapp) is_total,
CASE sum(tvf.vlrvendadia) perda_dia,
WHEN GROUPING(x.codigo) = 1 THEN 1 sum(tvf.vlrmetames) meta_mes,
ELSE 0 sum(tvf.vlrvendaacumulada) vda,
END AS is_total, sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_perda}, 'YYYY-MM-DD') THEN x.valor_venda ELSE 0 END) AS contribuicao_dia, sum(tvf.vlrmetadia) meta_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, sum(tvf.qtdclientes) qtd_clientes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
CASE round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 from mboard.tb_venda_flash tvf
ELSE ROUND( inner join mboard.tb_empresa_segmento tes
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / on tes.nroempresa = tvf.nroempresa
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100 and tes.nrodivisao = tvf.nrodivisao
, 2) and tes.nrosegmento = tvf.nrosegmento
END AS variacao_atual, and tes.codcanal = tvf.codcanal
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, where 1=1
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, and tvf.vlrvendaacumulada > 0
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - and tvf.dtavda = TO_DATE(${args.data_perda}, 'YYYY-MM-DD')
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
CASE group by rollup(canalapp, nomeempresaapp)
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) /
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_ano_anterior
FROM
(
SELECT
n.codigo,
n.nome AS nomeempresaapp,
r.data_referencia,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_perda}, 'YYYY-MM-DD')
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM
tb_flash_nodo_resumo_perda r
JOIN tb_flash_nodo n
ON
n.id_nodo = r.id_nodo
WHERE
n.tipo_nodo = 'EMPRESA'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_perda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_perda}, 'YYYY-MM-DD'), -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp),
()
)
`,
}; };
}, },
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
WITH params AS ( select
SELECT 'Categorias' as categoriaapp,
TO_DATE(${args.data_perda}, 'YYYY-MM-DD') AS data_venda, 1 as is_total,
${args.codigo_categoria_pai} AS codigo_categoria_pai, 0 as perda_dia,
${args.cod_empresa} AS cod_empresa 0 as meta_mes,
FROM dual 0 as mes_atual,
), 0 as dif_mes_atual,
nodo_pai_param AS ( 0 as variacao_atual,
SELECT n.* 0 as mes_anterior,
FROM tb_flash_nodo n 0 as dif_mes_anterior,
CROSS JOIN params p 0 as variacao_mes_anterior,
WHERE p.codigo_categoria_pai IS NOT NULL 0 as ano_anterior,
AND n.tipo_nodo = 'CATEGORIA' 0 as dif_ano_anterior,
AND n.codigo = p.codigo_categoria_pai 0 as variacao_ano_anterior
and (n.cod_empresa in (${args.ctx_user_companies_for_module})) from dual
AND ( where 1 = 0`,
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
),
nodos_filtrados AS (
SELECT filho.*
FROM tb_flash_nodo filho
JOIN nodo_pai_param pai_param
ON pai_param.id_nodo = filho.id_nodo_pai
CROSS JOIN params p
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
AND filho.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR filho.cod_empresa = p.cod_empresa
)
UNION ALL
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.ativo = 'S'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
p.cod_empresa IS NULL
OR n.cod_empresa = p.cod_empresa
)
AND n.nivel = (
SELECT MIN(n2.nivel)
FROM tb_flash_nodo n2
WHERE n2.tipo_nodo = 'CATEGORIA'
AND n2.ativo = 'S'
AND (
p.cod_empresa IS NULL
OR n2.cod_empresa = p.cod_empresa
)
)
)
SELECT
x.tipo_nodo AS categoriaapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp,
CASE
WHEN GROUPING(x.codigo) = 1 THEN 1
ELSE 0
END AS is_total,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
(SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02)
) * 100
) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)
) * 100
) - 100
, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(
(
(
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
/
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)
) * 100
) - 100
, 2)
END AS variacao_ano_anterior
FROM (
SELECT
cat.codigo AS codigo,
cat.nome AS nomeempresaapp,
cat.tipo_nodo,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1)
AND ADD_MONTHS(p.data_venda, -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12)
AND ADD_MONTHS(p.data_venda, -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_perda r
JOIN nodos_filtrados cat
ON cat.id_nodo = r.id_nodo
CROSS JOIN params p
WHERE (
r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1)
AND ADD_MONTHS(p.data_venda, -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12)
AND ADD_MONTHS(p.data_venda, -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
}; };
}, },
}, },
@@ -422,8 +208,7 @@ export default moduleFactory
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT SELECT
'Lojas' AS categoriaapp, 'Lojas' AS canalapp,
x.codigo AS cod_empresa,
x.nomeempresaapp AS nomeempresaapp, x.nomeempresaapp AS nomeempresaapp,
CASE CASE
WHEN GROUPING(x.nomeempresaapp) = 1 THEN 1 WHEN GROUPING(x.nomeempresaapp) = 1 THEN 1
@@ -676,78 +461,24 @@ export default moduleFactory
`,}; `,};
}, },
}, },
C5_mambo: { C5_mambo: {flashPerdas: (args) => {
flashPerdas: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ ``,};
select
tes.canalapp,
tes.nomeempresaapp,
grouping(tes.canalapp) is_total,
sum(tvf.vlrvendadia) perda_dia,
sum(tvf.vlrmetames) meta_mes,
sum(tvf.vlrvendaacumulada) vda,
sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
sum(tvf.vlrmetadia) meta_dia,
round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
sum(tvf.qtdclientes) qtd_clientes,
round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
from mboard.tb_venda_flash tvf
inner join mboard.tb_empresa_segmento tes
on tes.nroempresa = tvf.nroempresa
and tes.nrodivisao = tvf.nrodivisao
and tes.nrosegmento = tvf.nrosegmento
and tes.codcanal = tvf.codcanal
where 1=1
and tvf.vlrvendaacumulada > 0
and tvf.dtavda = TO_DATE(${args.data_perda}, 'YYYY-MM-DD')
and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
group by rollup(canalapp, nomeempresaapp)
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
};
}, },
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ ``,};
select
'Categorias' as categoriaapp,
1 as is_total,
0 as perda_dia,
0 as meta_mes,
0 as mes_atual,
0 as dif_mes_atual,
0 as variacao_atual,
0 as mes_anterior,
0 as dif_mes_anterior,
0 as variacao_mes_anterior,
0 as ano_anterior,
0 as dif_ano_anterior,
0 as variacao_ano_anterior
from dual
where 1 = 0`,
};
}, },
}, },
}).withSchedules({ }).withSchedules({
C5: [ C5: [
createSchedule({ {
name: "Procedure que atualiza os dados do flash de Perdas", name: "Procedure que atualiza os dados do flash",
params: ["perdas_empresas", "perdas_divisao", "perdas_cgos", "perdas_dias_atualizacao"], command: /*sql*/ `BEGIN
command: (args) => ({ END`,
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_PERDA_DONO(
p_data_inicial => TRUNC(SYSDATE) - ${args.perdas_dias_atualizacao},
p_data_final => TRUNC(SYSDATE),
p_empresas => ${args.perdas_empresas},
p_divisao => ${args.perdas_divisao},
p_cgos => ${args.perdas_cgos}
);
END;`,
}),
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}), },
], ],
C5_big: [ C5_big: [
{ {
@@ -759,7 +490,7 @@ where 1 = 0`,
p_empresa_ini => 1, p_empresa_ini => 1,
p_empresa_fim => 10 p_empresa_fim => 10
); );
END;`, END`,
cron: "0 * * * *", cron: "0 * * * *",
timeout_seconds: 2400, timeout_seconds: 2400,
}, },
+119 -74
View File
@@ -8,14 +8,13 @@ export default moduleFactory
description: "Consulta de Produtos", description: "Consulta de Produtos",
label: "Consulta de Produtos", label: "Consulta de Produtos",
icon: "search", icon: "search",
order: 0,
queries: { queries: {
consulta: { consulta: {
name: "Consulta de Produtos", name: "Consulta de Produtos",
display: { display: {
type: "list", type: "list",
search_bar: { search_bar: {
placeholder: "Digite o nome, código ou EAN do produto", placeholder: "Digite o nome, código ou EAN do produto",
}, },
rows: { rows: {
title: "title", title: "title",
@@ -37,12 +36,12 @@ export default moduleFactory
last_sale: "dataultimavenda", last_sale: "dataultimavenda",
sections: [ sections: [
{ {
label: "Preço Atacado", label: "Preço Atacado",
column: "precoatacado", column: "precoatacado",
format: "currency_short", format: "currency_short",
}, },
{ {
label: "Preço Varejo", label: "Preço Varejo",
column: "precovarejo", column: "precovarejo",
format: "currency_short", format: "currency_short",
}, },
@@ -67,7 +66,7 @@ export default moduleFactory
format: "string", format: "string",
}, },
{ {
label: "Descrição Embalagem", label: "Descrição Embalagem",
column: "descricaoembalagem", column: "descricaoembalagem",
format: "string", format: "string",
}, },
@@ -78,7 +77,7 @@ export default moduleFactory
entrypoint: "detalhe_preco_embalagem", entrypoint: "detalhe_preco_embalagem",
}, },
{ {
label: "Estoque Disponível", label: "Estoque Disponível",
column: "estoqueDisponivel", column: "estoqueDisponivel",
format: "number", format: "number",
}, },
@@ -88,7 +87,7 @@ export default moduleFactory
format: "number", format: "number",
}, },
{ {
label: "Estoque Trânsito", label: "Estoque Trânsito",
column: "estoquetransito", column: "estoquetransito",
format: "number", format: "number",
}, },
@@ -108,12 +107,12 @@ export default moduleFactory
format: "currency_short", format: "currency_short",
}, },
{ {
label: "DDV Mínimo", label: "DDV Mínimo",
column: "ddvminimo", column: "ddvminimo",
format: "currency_short", format: "currency_short",
}, },
{ {
label: "DDV Máximo", label: "DDV Máximo",
column: "ddvmaximo", column: "ddvmaximo",
format: "currency_short", format: "currency_short",
}, },
@@ -123,12 +122,12 @@ export default moduleFactory
format: "string", format: "string",
}, },
{ {
label: "Situação", label: "Situação",
column: "situacao", column: "situacao",
format: "string", format: "string",
}, },
{ {
label: "Estoque Disponível CD", label: "Estoque Disponível CD",
column: "estoquedisponivelcd", column: "estoquedisponivelcd",
format: "number", format: "number",
}, },
@@ -138,7 +137,7 @@ export default moduleFactory
format: "number", format: "number",
}, },
{ {
label: "Custo Líquido", label: "Custo Líquido",
column: "custoliquido", column: "custoliquido",
format: "currency_short", format: "currency_short",
}, },
@@ -183,22 +182,22 @@ export default moduleFactory
format: "number", format: "number",
}, },
{ {
label: "Margem Lucro Divisão", label: "Margem Lucro Divisão",
column: "margemlucrodivisao", column: "margemlucrodivisao",
format: "percentage", format: "percentage",
}, },
{ {
label: "Preço Promoção", label: "Preço Promoção",
column: "precopromoc", column: "precopromoc",
format: "currency_short", format: "currency_short",
}, },
{ {
label: "Preço Normal", label: "Preço Normal",
column: "preconormal", column: "preconormal",
format: "currency_short", format: "currency_short",
}, },
{ {
label: "Preço Meu Mambo", label: "Preço Meu Mambo",
column: "precomeuMambo", column: "precomeuMambo",
format: "currency_short", format: "currency_short",
}, },
@@ -213,12 +212,12 @@ export default moduleFactory
format: "percentage", format: "percentage",
}, },
{ {
label: "MDV Promoção", label: "MDV Promoção",
column: "mdvpromoc", column: "mdvpromoc",
format: "currency_short", format: "currency_short",
}, },
{ {
label: "Preço Vencimento Próximo", label: "Preço Vencimento Próximo",
column: "vlrprecovenctoprox", column: "vlrprecovenctoprox",
format: "currency_short", format: "currency_short",
}, },
@@ -234,7 +233,7 @@ export default moduleFactory
params: ["codproduto"], params: ["codproduto"],
}, },
detalhe_preco: { detalhe_preco: {
name: "Detalhe Preço Embalagem", name: "Detalhe Preço Embalagem",
display: { display: {
type: "table", type: "table",
table: { table: {
@@ -243,10 +242,10 @@ export default moduleFactory
label: "Embalagem", label: "Embalagem",
}, },
{ {
label: "Preço Embalagem", label: "Preço Embalagem",
}, },
{ {
label: "Preço Unidade", label: "Preço Unidade",
}, },
{ {
label: "Margem", label: "Margem",
@@ -309,13 +308,13 @@ export default moduleFactory
params: ["nrempresa", "codproduto"], params: ["nrempresa", "codproduto"],
}, },
detalhe_situacao_vigente: { detalhe_situacao_vigente: {
name: "Detalhe Histórico Venda", name: "Detalhe Histórico Venda",
display: { display: {
type: "table", type: "table",
table: { table: {
header: [ header: [
{ {
label: "Data Início", label: "Data Início",
}, },
{ {
label: "Data Fim", label: "Data Fim",
@@ -324,7 +323,7 @@ export default moduleFactory
label: "Embalagem", label: "Embalagem",
}, },
{ {
label: "Preço", label: "Preço",
}, },
], ],
cell: [ cell: [
@@ -350,7 +349,7 @@ export default moduleFactory
params: ["nrempresa", "codproduto"], params: ["nrempresa", "codproduto"],
}, },
detalhe_custo_liquido: { detalhe_custo_liquido: {
name: "Detalhe Custo Médio", name: "Detalhe Custo Médio",
display: { display: {
type: "table", type: "table",
table: { table: {
@@ -391,7 +390,7 @@ export default moduleFactory
params: ["nrempresa", "codproduto"], params: ["nrempresa", "codproduto"],
}, },
detalhe_estoque_disponivel: { detalhe_estoque_disponivel: {
name: "Detalhe Estoque Disponível", name: "Detalhe Estoque Disponível",
display: { display: {
type: "table", type: "table",
table: { table: {
@@ -432,7 +431,7 @@ export default moduleFactory
params: ["nrempresa", "codproduto"], params: ["nrempresa", "codproduto"],
}, },
detalhe_estoque_transito: { detalhe_estoque_transito: {
name: "Detalhe Estoque Trânsito", name: "Detalhe Estoque Trânsito",
display: { display: {
type: "table", type: "table",
table: { table: {
@@ -518,9 +517,11 @@ export default moduleFactory
detalhe: (args) => { detalhe: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
select DISTINCT pemp.nroempresa, select /*+ FIRST_ROWS(10) */ DISTINCT pemp.nroempresa,
--(SELECT COMPRADOR FROM tb_comprador tcomp WHERE tcomp.COMPRADOR = mco.comprador) AS comprador,
'BIG' AS comprador, 'BIG' AS comprador,
nvl(mff.fornecedor, 'N/A') fornecedor, nvl(mff.fornecedor, 'N/A') fornecedor,
-- [inline: consinco.gmgbfcategoriafamilian1(pro.seqfamilia, me.nrodivisao, 1)]
(select max(b_cat.caminhocompleto) (select max(b_cat.caminhocompleto)
from consinco.map_famdivcateg a_cat, consinco.map_categoria b_cat from consinco.map_famdivcateg a_cat, consinco.map_categoria b_cat
where a_cat.seqcategoria = b_cat.seqcategoria where a_cat.seqcategoria = b_cat.seqcategoria
@@ -548,11 +549,15 @@ export default moduleFactory
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
end / pes2.qtdembalagem,2) end / pes2.qtdembalagem,2)
end PrecoAtacado, end PrecoAtacado,
trunc(case trunc(case
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0)
end, 2) PrecoVarejo, end, 2) PrecoVarejo,
trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV, trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV,
-- [inline: gmgb_fn_buscamargemproduto(pemp.nroempresa, pemp.seqproduto)]
nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, emp_mg.nrosegmentoprinc, seg_mg.qtdembalagem, nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, emp_mg.nrosegmentoprinc, seg_mg.qtdembalagem,
(round( ( pe_mg.CMULTVLRNF + pe_mg.CMULTIPI - (round( ( pe_mg.CMULTVLRNF + pe_mg.CMULTIPI -
decode( 'L', 'L', pe_mg.CMULTCREDICMS + decode( 'L', 'L', pe_mg.CMULTCREDICMS +
@@ -579,6 +584,7 @@ export default moduleFactory
join consinco.map_familia fam_mg join consinco.map_familia fam_mg
on fam_mg.seqfamilia = pr_mg.seqfamilia on fam_mg.seqfamilia = pr_mg.seqfamilia
where emp_mg.nroempresa = pemp.nroempresa),0) Margem, where emp_mg.nroempresa = pemp.nroempresa),0) Margem,
case case
when trunc(case when trunc(case
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
@@ -588,6 +594,7 @@ export default moduleFactory
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
end / pes2.qtdembalagem,2 end / pes2.qtdembalagem,2
) )
-- [inline: gmgb_fn_buscamargemproduto(pemp.nroempresa, pemp.seqproduto)]
then nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, emp_mg2.nrosegmentoprinc, seg_mg2.qtdembalagem, then nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, emp_mg2.nrosegmentoprinc, seg_mg2.qtdembalagem,
(round( ( pe_mg2.CMULTVLRNF + pe_mg2.CMULTIPI - (round( ( pe_mg2.CMULTVLRNF + pe_mg2.CMULTIPI -
decode( 'L', 'L', pe_mg2.CMULTCREDICMS + decode( 'L', 'L', pe_mg2.CMULTCREDICMS +
@@ -615,6 +622,7 @@ export default moduleFactory
on fam_mg2.seqfamilia = pr_mg2.seqfamilia on fam_mg2.seqfamilia = pr_mg2.seqfamilia
where emp_mg2.nroempresa = pemp.nroempresa),0) where emp_mg2.nroempresa = pemp.nroempresa),0)
else else
-- [inline: CONSINCO.GMGB_FN_BUSCAMARGEMPRODUTO_AT2(pemp.nroempresa, pemp.seqproduto)]
nvl((select case when at2_q.precovalidpromoc > 0 then round(at2_q.mgmprecovdapromoc,2) nvl((select case when at2_q.precovalidpromoc > 0 then round(at2_q.mgmprecovdapromoc,2)
when at2_q.precovalidnormal > 0 then round(at2_q.mgmprecominvdaempresa,2) when at2_q.precovalidnormal > 0 then round(at2_q.mgmprecominvdaempresa,2)
end end
@@ -622,21 +630,21 @@ export default moduleFactory
SELECT x_at2.precovalidnormal, SELECT x_at2.precovalidnormal,
x_at2.precovalidpromoc, x_at2.precovalidpromoc,
decode (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) decode (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
and a_fp.precovalidnormal > 0 and a_fp.precovalidnormal > 0
and a_fp.statusvenda = 'A') * x_at2.qtdembalagem), 0, 0, and a_fp.statusvenda = 'A') * x_at2.qtdembalagem), 0, 0,
((((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) ((((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
and a_fp.precovalidnormal > 0 and a_fp.precovalidnormal > 0
and a_fp.statusvenda = 'A') * x_at2.qtdembalagem) - ( and a_fp.statusvenda = 'A') * x_at2.qtdembalagem) - (
(((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
@@ -668,7 +676,7 @@ export default moduleFactory
* case when (a_at2.seqprodutobase is not null and m_at2.utilacresccustprodrelac = 'S') then nvl(a_at2.percacresccustorelacvig,1) else 1 end * case when (a_at2.seqprodutobase is not null and m_at2.utilacresccustprodrelac = 'S') then nvl(a_at2.percacresccustorelacvig,1) else 1 end
+ +
(((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
@@ -695,7 +703,7 @@ export default moduleFactory
+ h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto + h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto
+ nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)))) / 100))) / + nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)))) / 100))) /
(((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
@@ -703,7 +711,7 @@ export default moduleFactory
and a_fp.statusvenda = 'A') * x_at2.qtdembalagem) and a_fp.statusvenda = 'A') * x_at2.qtdembalagem)
- decode(m_at2.metodocalcrentab,'L', ( - decode(m_at2.metodocalcrentab,'L', (
(((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
@@ -713,7 +721,7 @@ export default moduleFactory
else decode(m_at2.metodoprecificacao,'B',0,'I',0, decode(h_at2.pericmsestimativa,0, f_at2.pertributado * nvl(f_at2.peraliqicmscalcpreco, f_at2.peraliquota) / 100, h_at2.pericmsestimativa)) else decode(m_at2.metodoprecificacao,'B',0,'I',0, decode(h_at2.pericmsestimativa,0, f_at2.pertributado * nvl(f_at2.peraliqicmscalcpreco, f_at2.peraliquota) / 100, h_at2.pericmsestimativa))
end / 100)) end / 100))
+ (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem) + (((select min(a_fp.precovalidnormal / a_fp.qtdembalagem)
from consinco.mrl_prodempseg a_fp from mrl_prodempseg a_fp
where a_fp.seqproduto = x_at2.seqproduto where a_fp.seqproduto = x_at2.seqproduto
and a_fp.nroempresa = x_at2.nroempresa and a_fp.nroempresa = x_at2.nroempresa
and a_fp.nrosegmento = o_at2.nrosegmento and a_fp.nrosegmento = o_at2.nrosegmento
@@ -737,6 +745,7 @@ export default moduleFactory
+ h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto + h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto
+ nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)) / 100)), 0) + nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)) / 100)), 0)
)) * 100) as mgmprecominvdaempresa, )) * 100) as mgmprecominvdaempresa,
decode(round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2), 0, 0, decode(round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2), 0, 0,
((round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) - ( ((round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) - (
(round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) * (round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) *
@@ -773,14 +782,14 @@ export default moduleFactory
+ (decode(nvl(m_at2.tipcalcmargem, m_at2.tipdivisao),'A', n_at2.perdespclassifabc, nvl(o_at2.perdespesasegmento, nvl(c_at2.perdespesadivisao, nvl(h_at2.perdespoperacional,0)))) + (decode(nvl(m_at2.tipcalcmargem, m_at2.tipdivisao),'A', n_at2.perdespclassifabc, nvl(o_at2.perdespesasegmento, nvl(c_at2.perdespesadivisao, nvl(h_at2.perdespoperacional,0))))
+ decode(m_at2.metodoprecificacao,'B',0, + decode(m_at2.metodoprecificacao,'B',0,
nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia), nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N')),
decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0, decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)),
decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) * decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) *
((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100) ((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100)
+ nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia), + nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N')),
decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0, decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)),
@@ -800,14 +809,14 @@ export default moduleFactory
+ (round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) * + (round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) *
decode(m_at2.metodoprecificacao,'B',0, decode(m_at2.metodoprecificacao,'B',0,
nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia), nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N')),
decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0, decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)),
decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) * decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) *
((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100) ((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100)
+ nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia), + nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N')),
decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0, decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)),
@@ -816,6 +825,7 @@ export default moduleFactory
+ h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto + h_at2.percpmf + h_at2.perir + h_at2.peroutroimposto
+ nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)) / 100)), 0) + nvl(decode(nvl(f_at2.indcalcstembutprod,'N'),'S', f_at2.peraliquotast + (f_at2.peraliquotast * f_at2.peracrescst / 100),0),0)) / 100)), 0)
)) * 100) as mgmprecovdapromoc )) * 100) as mgmprecovdapromoc
from consinco.max_empresa h_at2, from consinco.max_empresa h_at2,
consinco.map_produto a_at2, consinco.map_produto a_at2,
consinco.mrl_produtoempresa b_at2, consinco.mrl_produtoempresa b_at2,
@@ -882,13 +892,14 @@ export default moduleFactory
and x_at2.qtdembalagem = 1 and x_at2.qtdembalagem = 1
and b_at2.nroempresa = pemp.nroempresa and b_at2.nroempresa = pemp.nroempresa
and b_at2.seqproduto = pemp.seqproduto and b_at2.seqproduto = pemp.seqproduto
and r_at2.rowid = decode((select min(id) from consinco.maxx_selecrowid and r_at2.rowid = decode((select min(id) from maxx_selecrowid
where maxx_selecrowid.sequencia = 4 where maxx_selecrowid.sequencia = 4
and maxx_selecrowid.seqfamilia = r_at2.seqfamilia), null, and maxx_selecrowid.seqfamilia = r_at2.seqfamilia), null,
(select min(mfr2.rowid) from consinco.map_famfornec mfr2 where mfr2.seqfamilia = r_at2.seqfamilia and mfr2.principal = 'S'), (select min(mfr2.rowid) from consinco.map_famfornec mfr2 where mfr2.seqfamilia = r_at2.seqfamilia and mfr2.principal = 'S'),
(select min(id) from consinco.maxx_selecrowid where maxx_selecrowid.sequencia = 4 and maxx_selecrowid.seqfamilia = r_at2.seqfamilia)) (select min(id) from maxx_selecrowid where maxx_selecrowid.sequencia = 4 and maxx_selecrowid.seqfamilia = r_at2.seqfamilia))
) at2_q),0) ) at2_q),0)
end MargemAtacado, end MargemAtacado,
nvl(pemp.codclassifpreco,'Sem valor') ClasseAbastecimento, nvl(pemp.codclassifpreco,'Sem valor') ClasseAbastecimento,
emb.embalagem DescricaoEmbalagem, emb.embalagem DescricaoEmbalagem,
trunc(nvl(emb.qtdembalagem,0)) QuantidadeEmbalagem, trunc(nvl(emb.qtdembalagem,0)) QuantidadeEmbalagem,
@@ -896,22 +907,25 @@ export default moduleFactory
when pemp.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito - pemp.qtdreservadavda,0),3) when pemp.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito - pemp.qtdreservadavda,0),3)
else trunc(nvl(pemp.estqloja,0), 3) - (NVL(pemp.qtdreservadavda,0)) else trunc(nvl(pemp.estqloja,0), 3) - (NVL(pemp.qtdreservadavda,0))
end EstoqueDisponivel, end EstoqueDisponivel,
NVL(pemp.estqtroca,0) EstoqueTroca, NVL(pemp.estqtroca,0) EstoqueTroca,
0 EstoqueTransito, NVL(pemp.qtdpedrectransito_depreciada,0) EstoqueTransito,
0 EstoqueFuturo, --pemp.qtdpendpedcompra_depreciada EstoqueFuturo,
NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, --24/05/2024 - cfreitas - Incluído estqoutro para não ser necessário utilizar MADV_COMPOSICAORESERVASELINV
ROUND(nvl(case ROUND(nvl(case
when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0 when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0
when NVL(pemp.medvdiaforapromoc,0) > 0 then (nvl(case when me.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito,0), 3) else trunc(nvl(pemp.estqloja,0), 3) end,0) - NVL(pemp.qtdreservadavda,0) ) / trunc(nvl(pemp.medvdiaforapromoc,1),4) when NVL(pemp.medvdiaforapromoc,0) > 0 then (nvl(case when me.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito,0), 3) else trunc(nvl(pemp.estqloja,0), 3) end,0) - NVL(pemp.qtdreservadavda,0) ) / trunc(nvl(pemp.medvdiaforapromoc,1),4)
end, 0), 3) DDV, end, 0), 3) DDV,
nvl(pemp.estqminimodv,0) DDVMinimo, nvl(pemp.estqminimodv,0) DDVMinimo,
nvl(pemp.estqmaximodv, 0) DDVMaximo, nvl(pemp.estqmaximodv, 0) DDVMaximo,
case case
WHEN (select count(1) from consinco.mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO' WHEN (select count(1) from mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO'
when pemp.formaabastecimento = 'I' then 'ARMAZENAGEM' when pemp.formaabastecimento = 'I' then 'ARMAZENAGEM'
when pemp.formaabastecimento = 'C' then 'CROSS' when pemp.formaabastecimento = 'C' then 'CROSS'
when pemp.formaabastecimento = 'N' then 'CENTRAL-EDL' when pemp.formaabastecimento = 'N' then 'CENTRAL-EDL'
when pemp.formaabastecimento = 'E' then 'LOJA-EDL' when pemp.formaabastecimento = 'E' then 'LOJA-EDL'
-- [inline: gmgb_fn_busca_forma_abastecfam(pro.seqfamilia, md.nrodivisao)]
when pemp.formaabastecimento is null then ( when pemp.formaabastecimento is null then (
select case select case
when mfd_fa.formaabastecimento = 'I' then 'ARMAZENAGEM' when mfd_fa.formaabastecimento = 'I' then 'ARMAZENAGEM'
@@ -924,14 +938,16 @@ export default moduleFactory
where mfd_fa.seqfamilia = pro.seqfamilia where mfd_fa.seqfamilia = pro.seqfamilia
and mfd_fa.nrodivisao = md.nrodivisao) and mfd_fa.nrodivisao = md.nrodivisao)
end FormaAbastecimento, end FormaAbastecimento,
case case
when pes.precovalidpromoc > 0.00 then 'PROMOCAO' when pes.precovalidpromoc > 0.00 then 'PROMOCAO'
when pes.precovalidpromoc = 0.00 then 'NORMAL' when pes.precovalidpromoc = 0.00 then 'NORMAL'
end Situacao, end Situacao,
pempcd.estqdeposito - nvl(pempcd.qtdreservadavda,0) EstoqueDisponivelCD, pempcd.estqdeposito - nvl(pempcd.qtdreservadavda,0) EstoqueDisponivelCD,
pempcd.qtdpendpedcompra_depreciada EstoqueFuturoCD,
(select max(mnf_de.Dtaentrada) (select max(mnf_de.Dtaentrada)
from consinco.mlf_notafiscal mnf_de from mlf_notafiscal mnf_de
inner join consinco.mlf_nfitem mnfi_de inner join mlf_nfitem mnfi_de
on mnfi_de.NUMERONF = mnf_de.NUMERONF on mnfi_de.NUMERONF = mnf_de.NUMERONF
and mnfi_de.SEQPESSOA = mnf_de.SEQPESSOA and mnfi_de.SEQPESSOA = mnf_de.SEQPESSOA
and mnfi_de.SERIENF = mnf_de.SERIENF and mnfi_de.SERIENF = mnf_de.SERIENF
@@ -947,6 +963,7 @@ export default moduleFactory
and mnf_de.dtaentrada <= trunc(sysdate - 1) and mnf_de.dtaentrada <= trunc(sysdate - 1)
and mnf_de.nroempresa = pemp.nroempresa and mnf_de.nroempresa = pemp.nroempresa
and mnfi_de.seqproduto = pemp.seqproduto) DATAULTIMAENTRADA, and mnfi_de.seqproduto = pemp.seqproduto) DATAULTIMAENTRADA,
pemp.dtaultvenda DATAULTIMAVENDA, pemp.dtaultvenda DATAULTIMAVENDA,
consinco.fmrl_custoprodempatual(pro.seqproduto, pemp.nroempresa, 'L') custoliquido, consinco.fmrl_custoprodempatual(pro.seqproduto, pemp.nroempresa, 'L') custoliquido,
CASE WHEN (select count(*) from consinco.mrl_prodempseg pest where pest.seqproduto = pemp.seqproduto and pest.nroempresa = pemp.nroempresa and pest.nrosegmento = seg.nrosegmento and pest.statusvenda = 'A' ) > 0 then 'A' ELSE 'I' end STATUSVENDA, CASE WHEN (select count(*) from consinco.mrl_prodempseg pest where pest.seqproduto = pemp.seqproduto and pest.nroempresa = pemp.nroempresa and pest.nrosegmento = seg.nrosegmento and pest.statusvenda = 'A' ) > 0 then 'A' ELSE 'I' end STATUSVENDA,
@@ -967,6 +984,7 @@ export default moduleFactory
nvl(pes.precovalidpromoc,0) PrecoPromoc, nvl(pes.precovalidpromoc,0) PrecoPromoc,
nvl(pes.precovalidnormal,0) PrecoNormal, nvl(pes.precovalidnormal,0) PrecoNormal,
nvl(pes3.precovalidpromoc,0) PrecoMeuMambo, nvl(pes3.precovalidpromoc,0) PrecoMeuMambo,
-- [inline: consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa, pemp.seqproduto, 15)]
case when pes3.precovalidpromoc > 0 then case when pes3.precovalidpromoc > 0 then
nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, 15, seg_mbo1.qtdembalagem, nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, 15, seg_mbo1.qtdembalagem,
(round( ( pe_mbo1.CMULTVLRNF + pe_mbo1.CMULTIPI - (round( ( pe_mbo1.CMULTVLRNF + pe_mbo1.CMULTIPI -
@@ -997,6 +1015,7 @@ export default moduleFactory
else else
0 0
end MargemMeuMambo, end MargemMeuMambo,
-- [inline: consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa, pemp.seqproduto, 2, 'S')]
nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, 2, seg_mbo2.qtdembalagem, nvl((select round(max(consinco.fc5margempreco(pemp.seqproduto, pemp.nroempresa, 2, seg_mbo2.qtdembalagem,
(round( ( pe_mbo2.CMULTVLRNF + pe_mbo2.CMULTIPI - (round( ( pe_mbo2.CMULTVLRNF + pe_mbo2.CMULTIPI -
decode( 'L', 'L', pe_mbo2.CMULTCREDICMS + decode( 'L', 'L', pe_mbo2.CMULTCREDICMS +
@@ -1026,48 +1045,64 @@ export default moduleFactory
trunc(nvl(pemp.medvdiapromoc,0),4) MdvPromoc, trunc(nvl(pemp.medvdiapromoc,0),4) MdvPromoc,
NVL(vncto.vlrprecovenctoprox,0) VLRPRECOVENCTOPROX, NVL(vncto.vlrprecovenctoprox,0) VLRPRECOVENCTOPROX,
vncto.dtavalidade vncto.dtavalidade
from consinco.max_divisao md from consinco.max_divisao md
inner join consinco.max_empresa me inner join consinco.max_empresa me
on me.nrodivisao = md.nrodivisao on me.nrodivisao = md.nrodivisao
and me.dtainiciomovestoque <= trunc(sysdate) and me.dtainiciomovestoque <= trunc(sysdate)
and me.status = 'A' and me.status = 'A'
inner join consinco.mad_segmento seg inner join consinco.mad_segmento seg
on md.nrodivisao = me.nrodivisao on md.nrodivisao = me.nrodivisao
and me.nrosegmentoprinc = seg.nrosegmento and me.nrosegmentoprinc = seg.nrosegmento
inner join consinco.mrl_produtoempresa pemp inner join consinco.mrl_produtoempresa pemp
on pemp.nroempresa = me.nroempresa on pemp.nroempresa = me.nroempresa
left join consinco.mrl_produtoempresa pempcd left join consinco.mrl_produtoempresa pempcd
on pempcd.seqproduto = pemp.seqproduto on pempcd.seqproduto = pemp.seqproduto
left join consinco.map_classeabastec mcab left join consinco.map_classeabastec mcab
on mcab.classeabastqtd = pemp.classeabastqtd on mcab.classeabastqtd = pemp.classeabastqtd
and mcab.nroempresa = pemp.nroempresa and mcab.nroempresa = pemp.nroempresa
and mcab.classeabastvlr = pemp.classeabastvlr and mcab.classeabastvlr = pemp.classeabastvlr
inner join consinco.map_produto pro inner join consinco.map_produto pro
on pro.seqproduto = pemp.seqproduto on pro.seqproduto = pemp.seqproduto
inner join consinco.map_famdivisao mfdv inner join consinco.map_famdivisao mfdv
on mfdv.seqfamilia = pro.seqfamilia on mfdv.seqfamilia = pro.seqfamilia
and mfdv.nrodivisao = me.nrodivisao and mfdv.nrodivisao = me.nrodivisao
inner join consinco.max_comprador mco inner join consinco.max_comprador mco
on mco.seqcomprador = mfdv.seqcomprador on mco.seqcomprador = mfdv.seqcomprador
left join consinco.map_produtoimagem mapi left join consinco.map_produtoimagem mapi
on mapi.seqproduto = pro.seqproduto on mapi.seqproduto = pro.seqproduto
and mapi.indpricipal = 'S' and mapi.indpricipal = 'S'
inner join consinco.mrl_prodempseg pes inner join consinco.mrl_prodempseg pes
on pes.seqproduto = pemp.seqproduto on pes.seqproduto = pemp.seqproduto
and pes.nroempresa = pemp.nroempresa and pes.nroempresa = pemp.nroempresa
and pes.nrosegmento = seg.nrosegmento and pes.nrosegmento = seg.nrosegmento
and pes.qtdembalagem = 1 and pes.qtdembalagem = 1
inner join consinco.mrl_prodempseg pes2 inner join consinco.mrl_prodempseg pes2
on pes2.nroempresa = pes.nroempresa on pes2.nroempresa = pes.nroempresa
and pes2.seqproduto = pes.seqproduto and pes2.seqproduto = pes.seqproduto
and pes2.nrosegmento = pes.nrosegmento and pes2.nrosegmento = pes.nrosegmento
left join consinco.mrl_prodempseg pes3 left join consinco.mrl_prodempseg pes3
on pes3.seqproduto = pemp.seqproduto on pes3.seqproduto = pemp.seqproduto
and pes3.nroempresa = pemp.nroempresa and pes3.nroempresa = pemp.nroempresa
--and pes3.nrosegmento = 15
and pes3.qtdembalagem = 1 and pes3.qtdembalagem = 1
inner join consinco.map_famembalagem emb inner join consinco.map_famembalagem emb
on emb.seqfamilia = pro.seqfamilia on emb.seqfamilia = pro.seqfamilia
and emb.qtdembalagem = 1 and emb.qtdembalagem = 1
left join (select mffTemp.Seqfamilia, left join (select mffTemp.Seqfamilia,
mfdvTemp.Nrodivisao, mfdvTemp.Nrodivisao,
mffTemp.indindenizavaria, mffTemp.indindenizavaria,
@@ -1075,28 +1110,38 @@ left join (select mffTemp.Seqfamilia,
mfdvTemp.pzomedentrega, mfdvTemp.pzomedentrega,
mfdvTemp.pzomedatraso, mfdvTemp.pzomedatraso,
gp.fantasia fornecedor gp.fantasia fornecedor
from consinco.map_famfornec mffTemp from consinco.map_famfornec mffTemp
inner join consinco.ge_pessoa gp
inner join ge_pessoa gp
on gp.seqpessoa = mffTemp.Seqfornecedor on gp.seqpessoa = mffTemp.Seqfornecedor
left join consinco.maf_fornecdivisao mfdvTemp
left join maf_fornecdivisao mfdvTemp
on mfdvTemp.Seqfornecedor = mffTemp.Seqfornecedor on mfdvTemp.Seqfornecedor = mffTemp.Seqfornecedor
and mffTemp.Principal = 'S' and mffTemp.Principal = 'S'
) mff ) mff
on mff.seqfamilia = pro.seqfamilia on mff.seqfamilia = pro.seqfamilia
and mff.nrodivisao = md.nrodivisao and mff.nrodivisao = md.nrodivisao
left join (select pvencto.nroempresa, left join (select pvencto.nroempresa,
pvencto.seqproduto, pvencto.seqproduto,
min(pvencto.vlrpreco) vlrprecovenctoprox, min(pvencto.vlrpreco) vlrprecovenctoprox,
min(pvencto.dtavalidade) dtavalidade min(pvencto.dtavalidade) dtavalidade
from consinco.mrl_prodempvencimento pvencto from consinco.mrl_prodempvencimento pvencto
where pvencto.dtavalidade >= trunc(sysdate) where 1=1
and pvencto.dtavalidade >= trunc(sysdate)
and pvencto.qtdembalagem = 1 and pvencto.qtdembalagem = 1
group by pvencto.nroempresa, group by pvencto.nroempresa,
pvencto.seqproduto pvencto.seqproduto
) vncto ) vncto
ON vncto.nroempresa = pemp.nroempresa ON vncto.nroempresa = pemp.nroempresa
and vncto.seqproduto = pemp.seqproduto and vncto.seqproduto = pemp.seqproduto
where md.nrodivisao in (1)
where 1=1
--and pemp.SEQPRODUTO = 136011
--and pemp.nroempresa = 202
and md.nrodivisao in (1)
and pemp.seqproduto = ${args.codproduto} and pemp.seqproduto = ${args.codproduto}
and me.nroempresa in (${args.ctx_user_companies_for_module}) and me.nroempresa in (${args.ctx_user_companies_for_module})
and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
@@ -1135,14 +1180,14 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_mdv: (args) => { detalhe_mdv: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
select mcdia.dtaentradasaida data, select mcdia.dtaentradasaida data,
mcdia.nroempresa, mcdia.nroempresa,
mcdia.seqproduto, mcdia.seqproduto,
Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana, Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana,
mcdia.qtdvda qtd, mcdia.qtdvda qtd,
mcdia.qtdestqinicial qtd_inicial mcdia.qtdestqinicial qtd_inicial
from consinco.mrl_custodia mcdia from consinco.mrl_custodia mcdia
@@ -1192,7 +1237,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_custo_liquido: (args) => { detalhe_custo_liquido: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
@@ -1207,7 +1252,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
from consinco.mrl_custodiafam mcdiafam from consinco.mrl_custodiafam mcdiafam
INNER JOIN consinco.MAP_PRODUTO PROD INNER JOIN consinco.MAP_PRODUTO PROD
ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA
inner join consinco.max_empresa me inner join max_empresa me
on me.nroempresa = mcdiafam.nroempresa on me.nroempresa = mcdiafam.nroempresa
and me.status = 'A' and me.status = 'A'
and me.dtainiciomovestoque <= trunc(sysdate)-1 and me.dtainiciomovestoque <= trunc(sysdate)-1
@@ -1220,7 +1265,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_estoque_disponivel: (args) => { detalhe_estoque_disponivel: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
@@ -1273,7 +1318,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_estoque_transito: (args) => { detalhe_estoque_transito: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
@@ -1393,8 +1438,8 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
end EstoqueDisponivel, end EstoqueDisponivel,
NVL(pemp.estqtroca,0) EstoqueTroca, NVL(pemp.estqtroca,0) EstoqueTroca,
0 EstoqueTransito, NVL(pemp.qtdpedrectransito,0) EstoqueTransito,
0 EstoqueFuturo, pemp.qtdpendpedcompra EstoqueFuturo,
NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado,
ROUND(nvl(case ROUND(nvl(case
when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0 when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0
@@ -1605,7 +1650,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
select mcdia.dtaentradasaida data, select mcdia.dtaentradasaida data,
mcdia.nroempresa, mcdia.nroempresa,
mcdia.seqproduto, mcdia.seqproduto,
Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana, Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana,
mcdia.qtdvda qtd, mcdia.qtdvda qtd,
mcdia.qtdestqinicial qtd_inicial mcdia.qtdestqinicial qtd_inicial
from mrl_custodia mcdia from mrl_custodia mcdia
@@ -1769,7 +1814,7 @@ SELECT CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
FROM CONSINCO.MAP_PRODUTO p FROM CONSINCO.MAP_PRODUTO p
WHERE 1 = 1 WHERE 1 = 1
AND ( AND (
-- Bloco 1 - Filtro por Código Interno ou Descrição -- Bloco 1 - Filtro por Código Interno ou Descrição
( (
${args.filtro} IS NOT NULL ${args.filtro} IS NOT NULL
AND ( AND (
@@ -1778,7 +1823,7 @@ SELECT CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
) )
) )
OR OR
-- Bloco 2 - Filtro por EAN (Código de Barras) -- Bloco 2 - Filtro por EAN (Código de Barras)
( (
${args.ean} IS NOT NULL ${args.ean} IS NOT NULL
AND EXISTS ( AND EXISTS (
@@ -2063,14 +2108,14 @@ SELECT CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
+ (decode(nvl(m_at2.tipcalcmargem, m_at2.tipdivisao),'A', n_at2.perdespclassifabc, nvl(o_at2.perdespesasegmento, nvl(c_at2.perdespesadivisao, nvl(h_at2.perdespoperacional,0)))) + (decode(nvl(m_at2.tipcalcmargem, m_at2.tipdivisao),'A', n_at2.perdespclassifabc, nvl(o_at2.perdespesasegmento, nvl(c_at2.perdespesadivisao, nvl(h_at2.perdespoperacional,0))))
+ decode(m_at2.metodoprecificacao,'B',0, + decode(m_at2.metodoprecificacao,'B',0,
nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia), nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N')),
decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0, decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)),
decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) * decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) *
((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100) ((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100)
+ nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia), + nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N')),
decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0, decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)),
@@ -2090,14 +2135,14 @@ SELECT CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
+ (round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) * + (round(consinco.fminprecopromocprodemp(x_at2.seqproduto, x_at2.nroempresa) * x_at2.qtdembalagem, 2) *
decode(m_at2.metodoprecificacao,'B',0, decode(m_at2.metodoprecificacao,'B',0,
nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia), nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'P','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'P','N')),
decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0, decode(nvl(f_at2.situacaonfpis, l_at2.situacaonfpissai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.perpisdif, h_at2.perpis)),
decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) * decode(l_at2.indisentodebpiscofins,'S',0, h_at2.perpis))))) *
((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100) ((100 - decode(substr(f_at2.tiptributacao,1,1),'E', nvl(nvl(decode(f_at2.situacaonfpis,'01',f_at2.perbasepis,null), decode(l_at2.situacaonfpissai,'01',l_at2.perbasepis,null)),0),0)) / 100)
+ nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia), + nvl(coalesce(consinco.fmap_piscofinstribut(f_at2.nrotributacao, f_at2.ufempresa, f_at2.ufclientefornec, decode(m_at2.tipdivisao,'A','SC','SN'), f_at2.nroregtributacao, h_at2.nroempresa, h_at2.NRODIVISAO, h_at2.seqpessoaemp,'C','S','NP', a_at2.seqfamilia),
consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N','S')), consinco.fmap_piscofinsfamilia(h_at2.nroempresa, h_at2.nrodivisao, NULL, a_at2.seqfamilia,'C','N')),
decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0, decode(nvl(f_at2.situacaonfcofins, l_at2.situacaonfcofinssai),'00',0,'08',0,
decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'), decode(l_at2.indisentopis,'S',0, decode(nvl(l_at2.indmonopiscofins,'N'),
'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)), 'S', decode(nvl(h_at2.indfaturaipi,'N')||nvl(h_at2.indimportadora,'N'),'NN',0, nvl(f_at2.percofinsdif, h_at2.percofins)),
@@ -2190,8 +2235,8 @@ SELECT CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
end EstoqueDisponivel, end EstoqueDisponivel,
NVL(pemp.estqtroca,0) EstoqueTroca, NVL(pemp.estqtroca,0) EstoqueTroca,
0 EstoqueTransito, NVL(pemp.qtdpedrectransito_depreciada,0) EstoqueTransito,
0 EstoqueFuturo, pemp.qtdpendpedcompra_depreciada EstoqueFuturo,
NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado,
ROUND(nvl(case ROUND(nvl(case
when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0 when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0
@@ -2458,14 +2503,14 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_mdv: (args) => { detalhe_mdv: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
select mcdia.dtaentradasaida data, select mcdia.dtaentradasaida data,
mcdia.nroempresa, mcdia.nroempresa,
mcdia.seqproduto, mcdia.seqproduto,
Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana, Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana,
mcdia.qtdvda qtd, mcdia.qtdvda qtd,
mcdia.qtdestqinicial qtd_inicial mcdia.qtdestqinicial qtd_inicial
from consinco.mrl_custodia mcdia from consinco.mrl_custodia mcdia
@@ -2515,7 +2560,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_custo_liquido: (args) => { detalhe_custo_liquido: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
@@ -2530,7 +2575,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
from consinco.mrl_custodiafam mcdiafam from consinco.mrl_custodiafam mcdiafam
INNER JOIN consinco.MAP_PRODUTO PROD INNER JOIN consinco.MAP_PRODUTO PROD
ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA
inner join consinco.max_empresa me inner join max_empresa me
on me.nroempresa = mcdiafam.nroempresa on me.nroempresa = mcdiafam.nroempresa
and me.status = 'A' and me.status = 'A'
and me.dtainiciomovestoque <= trunc(sysdate)-1 and me.dtainiciomovestoque <= trunc(sysdate)-1
@@ -2543,7 +2588,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_estoque_disponivel: (args) => { detalhe_estoque_disponivel: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
@@ -2596,7 +2641,7 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
`, `,
}; };
}, },
/** SEM RETORNO DE INFORMAÇÕES */ /** SEM RETORNO DE INFORMAÇÕES */
detalhe_estoque_transito: (args) => { detalhe_estoque_transito: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `