This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE '
|
||||||
|
CREATE TABLE TB_FLASH_FATO_CONTRIBUICAO (
|
||||||
|
ID_FATO NUMBER NOT NULL,
|
||||||
|
DATA_REFERENCIA DATE NOT NULL,
|
||||||
|
ANO_REFERENCIA NUMBER(4) NOT NULL,
|
||||||
|
MES_REFERENCIA NUMBER(2) NOT NULL,
|
||||||
|
DIA_REFERENCIA NUMBER(2),
|
||||||
|
DIA_SEMANA NUMBER(2),
|
||||||
|
ID_NODO NUMBER NOT NULL,
|
||||||
|
ID_NODO_EMPRESA NUMBER NOT NULL,
|
||||||
|
COD_EMPRESA NUMBER NOT NULL,
|
||||||
|
NOME_EMPRESA VARCHAR2(200),
|
||||||
|
COD_PRODUTO NUMBER NOT NULL,
|
||||||
|
DESCRICAO_PRODUTO VARCHAR2(300),
|
||||||
|
SEQPRODUTOBASE NUMBER,
|
||||||
|
NRODIVISAO NUMBER,
|
||||||
|
NROSEGMENTO NUMBER,
|
||||||
|
NRO_TICKETS NUMBER(18,6),
|
||||||
|
VLR_IMP_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
QTDE_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
VLR_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
VL_TICKET_MEDIO NUMBER(18,6),
|
||||||
|
PROPQTDPRODUTOBASE NUMBER(18,6),
|
||||||
|
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
|
||||||
|
CONSTRAINT PK_TB_FLASH_FATO_CONTRIBUICAO PRIMARY KEY (ID_FATO),
|
||||||
|
CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO),
|
||||||
|
CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO),
|
||||||
|
CONSTRAINT CK_TB_FLASH_FATO_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12)
|
||||||
|
)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_DATA';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_DATA ON TB_FLASH_FATO_CONTRIBUICAO (DATA_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_ANOMES';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_ANOMES ON TB_FLASH_FATO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_NODO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_NODO ON TB_FLASH_FATO_CONTRIBUICAO (ID_NODO)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_EMP';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_EMP ON TB_FLASH_FATO_CONTRIBUICAO (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_PROD';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_PROD ON TB_FLASH_FATO_CONTRIBUICAO (COD_PRODUTO)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_FATO_CONTRIBUICAO UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE '
|
||||||
|
CREATE TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO (
|
||||||
|
ID_RESUMO NUMBER NOT NULL,
|
||||||
|
ID_NODO NUMBER NOT NULL,
|
||||||
|
DATA_REFERENCIA DATE NOT NULL,
|
||||||
|
ANO_REFERENCIA NUMBER(4) NOT NULL,
|
||||||
|
MES_REFERENCIA NUMBER(2) NOT NULL,
|
||||||
|
DIA_REFERENCIA NUMBER(2) NOT NULL,
|
||||||
|
NRO_TICKETS NUMBER(18,6),
|
||||||
|
VLR_IMP_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
QTDE_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
VLR_CONTRIBUICAO NUMBER(18,6),
|
||||||
|
VL_TICKET_MEDIO NUMBER(18,6),
|
||||||
|
VALOR_META_PROPRIA NUMBER(18,6),
|
||||||
|
VALOR_META_FILHOS NUMBER(18,6),
|
||||||
|
VALOR_META_EFETIVA NUMBER(18,6),
|
||||||
|
PERCENTUAL_META_PROPRIA NUMBER(10,4),
|
||||||
|
PERCENTUAL_META_FILHOS NUMBER(10,4),
|
||||||
|
PERCENTUAL_META_EFETIVA NUMBER(10,4),
|
||||||
|
DESVIO NUMBER(18,6),
|
||||||
|
PERCENTUAL_ATINGIMENTO NUMBER(18,6),
|
||||||
|
DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL,
|
||||||
|
CONSTRAINT PK_TB_FLASH_NODO_RES_CONTRIB PRIMARY KEY (ID_RESUMO),
|
||||||
|
CONSTRAINT FK_TB_FLASH_NODO_RES_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO),
|
||||||
|
CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
|
||||||
|
CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
|
||||||
|
)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_CONTRIB';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_NODO_RES_CONTRIB UNIQUE (ID_NODO, DATA_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_NODO';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_NODO ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ID_NODO)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_DATA';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_DATA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (DATA_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO (
|
||||||
|
p_data_inicial IN DATE,
|
||||||
|
p_data_final IN DATE
|
||||||
|
) AS
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM TB_FLASH_NODO_RESUMO_CONTRIBUICAO
|
||||||
|
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
|
||||||
|
|
||||||
|
INSERT INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO (
|
||||||
|
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
|
||||||
|
nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
|
||||||
|
vlr_contribuicao, vl_ticket_medio,
|
||||||
|
valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
|
||||||
|
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
|
||||||
|
desvio, percentual_atingimento, data_apuracao
|
||||||
|
)
|
||||||
|
WITH datas AS (
|
||||||
|
SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia
|
||||||
|
FROM dual
|
||||||
|
CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final)
|
||||||
|
),
|
||||||
|
contribuicao_direta AS (
|
||||||
|
SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia,
|
||||||
|
f.ano_referencia, f.mes_referencia, f.dia_referencia,
|
||||||
|
SUM(f.nro_tickets) AS nro_tickets,
|
||||||
|
SUM(f.vlr_imp_contribuicao) AS vlr_imp_contribuicao,
|
||||||
|
SUM(f.qtde_contribuicao) AS qtde_contribuicao,
|
||||||
|
SUM(f.vlr_contribuicao) AS vlr_contribuicao
|
||||||
|
FROM TB_FLASH_FATO_CONTRIBUICAO f
|
||||||
|
WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final
|
||||||
|
GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia
|
||||||
|
),
|
||||||
|
contribuicao_hierarquia AS (
|
||||||
|
SELECT a.id_nodo_ancestral AS id_nodo,
|
||||||
|
d.data_referencia,
|
||||||
|
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
|
||||||
|
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
|
||||||
|
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia,
|
||||||
|
SUM(NVL(cd.nro_tickets, 0)) AS nro_tickets,
|
||||||
|
SUM(NVL(cd.vlr_imp_contribuicao, 0)) AS vlr_imp_contribuicao,
|
||||||
|
SUM(NVL(cd.qtde_contribuicao, 0)) AS qtde_contribuicao,
|
||||||
|
SUM(NVL(cd.vlr_contribuicao, 0)) AS vlr_contribuicao
|
||||||
|
FROM (
|
||||||
|
SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
|
||||||
|
n.id_nodo AS id_nodo_descendente
|
||||||
|
FROM TB_FLASH_NODO n
|
||||||
|
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
|
||||||
|
) a
|
||||||
|
CROSS JOIN datas d
|
||||||
|
LEFT JOIN contribuicao_direta cd
|
||||||
|
ON cd.id_nodo = a.id_nodo_descendente
|
||||||
|
AND cd.data_referencia = d.data_referencia
|
||||||
|
GROUP BY a.id_nodo_ancestral, d.data_referencia
|
||||||
|
),
|
||||||
|
meta_propria_diaria AS (
|
||||||
|
SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia,
|
||||||
|
MAX(m.percentual_meta) AS percentual_meta_propria,
|
||||||
|
SUM(m.valor_meta) AS valor_meta_propria
|
||||||
|
FROM TB_FLASH_META_CONTRIBUICAO m
|
||||||
|
WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final
|
||||||
|
GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia
|
||||||
|
),
|
||||||
|
meta_filhos_diaria AS (
|
||||||
|
SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
|
||||||
|
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
|
||||||
|
FROM TB_FLASH_NODO pai
|
||||||
|
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
|
||||||
|
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
|
||||||
|
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
|
||||||
|
),
|
||||||
|
base AS (
|
||||||
|
SELECT n.id_nodo, d.data_referencia,
|
||||||
|
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
|
||||||
|
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
|
||||||
|
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia
|
||||||
|
FROM TB_FLASH_NODO n
|
||||||
|
CROSS JOIN datas d
|
||||||
|
)
|
||||||
|
SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL,
|
||||||
|
b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
|
||||||
|
ch.nro_tickets,
|
||||||
|
ch.vlr_imp_contribuicao,
|
||||||
|
ch.qtde_contribuicao,
|
||||||
|
ch.vlr_contribuicao,
|
||||||
|
CASE WHEN NVL(ch.nro_tickets, 0) > 0 THEN ch.vlr_contribuicao / ch.nro_tickets ELSE NULL END,
|
||||||
|
mpd.valor_meta_propria,
|
||||||
|
mfd.valor_meta_filhos,
|
||||||
|
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END,
|
||||||
|
mpd.percentual_meta_propria,
|
||||||
|
CAST(NULL AS NUMBER(10,4)),
|
||||||
|
CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END,
|
||||||
|
NVL(ch.vlr_contribuicao, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0),
|
||||||
|
CASE
|
||||||
|
WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL
|
||||||
|
ELSE (NVL(ch.vlr_contribuicao, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100
|
||||||
|
END,
|
||||||
|
SYSDATE
|
||||||
|
FROM base b
|
||||||
|
LEFT JOIN contribuicao_hierarquia ch ON ch.id_nodo = b.id_nodo AND ch.data_referencia = b.data_referencia
|
||||||
|
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
|
||||||
|
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO' AND object_type = 'PROCEDURE';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO (
|
||||||
|
p_data_inicial IN DATE,
|
||||||
|
p_data_final IN DATE,
|
||||||
|
p_empresa_ini IN NUMBER DEFAULT NULL,
|
||||||
|
p_empresa_fim IN NUMBER DEFAULT NULL
|
||||||
|
) AS
|
||||||
|
v_inicio_execucao DATE := SYSDATE;
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY'));
|
||||||
|
|
||||||
|
FOR r IN (
|
||||||
|
SELECT codigo
|
||||||
|
FROM vitruvio.vi_lojas
|
||||||
|
WHERE codigo NOT IN (301, 401, 500)
|
||||||
|
AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini)
|
||||||
|
AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim)
|
||||||
|
ORDER BY codigo
|
||||||
|
) LOOP
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Carregando contribuição da empresa: ' || r.codigo);
|
||||||
|
|
||||||
|
PRC_FLASH_CARGA_DADOS_CONTRIBUICAO(
|
||||||
|
p_data_inicial => p_data_inicial,
|
||||||
|
p_data_final => p_data_final,
|
||||||
|
p_empresa => r.codigo
|
||||||
|
);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(
|
||||||
|
'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM
|
||||||
|
);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de contribuição...');
|
||||||
|
|
||||||
|
PRC_FLASH_CARGA_META_CONTRIBUICAO_STG(
|
||||||
|
p_data_inicial => p_data_inicial,
|
||||||
|
p_data_final => p_data_final
|
||||||
|
);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Carregando metas finais de contribuição...');
|
||||||
|
|
||||||
|
PRC_FLASH_CARGA_META_CONTRIBUICAO(
|
||||||
|
p_data_inicial => p_data_inicial,
|
||||||
|
p_data_final => p_data_final
|
||||||
|
);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Atualizando resumo de contribuição...');
|
||||||
|
|
||||||
|
PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO(
|
||||||
|
p_data_inicial => p_data_inicial,
|
||||||
|
p_data_final => p_data_final
|
||||||
|
);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2));
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO: ' || SQLERRM);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,444 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
|
||||||
|
p_data_inicial IN DATE,
|
||||||
|
p_data_final IN DATE,
|
||||||
|
p_empresa IN NUMBER
|
||||||
|
) AS
|
||||||
|
v_id_empresa NUMBER;
|
||||||
|
v_id_cat1 NUMBER;
|
||||||
|
v_id_cat2 NUMBER;
|
||||||
|
v_id_cat3 NUMBER;
|
||||||
|
v_id_cat4 NUMBER;
|
||||||
|
v_id_cat5 NUMBER;
|
||||||
|
v_id_produto NUMBER;
|
||||||
|
v_contador NUMBER := 0;
|
||||||
|
|
||||||
|
FUNCTION FN_GET_OR_CREATE_NODO (
|
||||||
|
p_id_nodo_pai IN NUMBER,
|
||||||
|
p_tipo_nodo IN VARCHAR2,
|
||||||
|
p_codigo IN VARCHAR2,
|
||||||
|
p_nome IN VARCHAR2,
|
||||||
|
p_nivel IN NUMBER,
|
||||||
|
p_cod_empresa IN NUMBER DEFAULT NULL,
|
||||||
|
p_cod_produto IN NUMBER DEFAULT NULL,
|
||||||
|
p_seqprodutobase IN NUMBER DEFAULT NULL
|
||||||
|
) RETURN NUMBER
|
||||||
|
IS
|
||||||
|
v_id_nodo NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT n.id_nodo
|
||||||
|
INTO v_id_nodo
|
||||||
|
FROM TB_FLASH_NODO n
|
||||||
|
WHERE (
|
||||||
|
n.id_nodo_pai = p_id_nodo_pai
|
||||||
|
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
|
||||||
|
)
|
||||||
|
AND n.tipo_nodo = p_tipo_nodo
|
||||||
|
AND n.codigo = p_codigo
|
||||||
|
AND (
|
||||||
|
p_tipo_nodo <> 'PRODUTO'
|
||||||
|
OR (
|
||||||
|
n.cod_empresa = p_cod_empresa
|
||||||
|
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
UPDATE TB_FLASH_NODO n
|
||||||
|
SET n.nome = p_nome,
|
||||||
|
n.cod_empresa = p_cod_empresa,
|
||||||
|
n.cod_produto = p_cod_produto,
|
||||||
|
n.seqprodutobase = p_seqprodutobase,
|
||||||
|
n.data_atualizacao = SYSDATE
|
||||||
|
WHERE n.id_nodo = v_id_nodo
|
||||||
|
AND (
|
||||||
|
NVL(n.nome, '#') <> NVL(p_nome, '#')
|
||||||
|
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
|
||||||
|
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
|
||||||
|
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
|
||||||
|
);
|
||||||
|
|
||||||
|
RETURN v_id_nodo;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
|
||||||
|
|
||||||
|
INSERT INTO TB_FLASH_NODO (
|
||||||
|
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
|
||||||
|
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
|
||||||
|
data_cadastro, data_atualizacao
|
||||||
|
) VALUES (
|
||||||
|
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
|
||||||
|
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
|
||||||
|
SYSDATE, NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
RETURN v_id_nodo;
|
||||||
|
END;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
|
||||||
|
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
|
||||||
|
AND cod_empresa = p_empresa;
|
||||||
|
|
||||||
|
FOR r IN (
|
||||||
|
SELECT Z.DTA,
|
||||||
|
Z.NROEMPRESA,
|
||||||
|
Z.NOMEEMPRESA,
|
||||||
|
Z.NROSEGMENTO,
|
||||||
|
Z.NRODIVISAO,
|
||||||
|
Z.SEQPRODUTO,
|
||||||
|
Z.SEQPRODUTOBASE,
|
||||||
|
Z.PRODUTO,
|
||||||
|
Z.SEQCATEGORIAN1,
|
||||||
|
Z.CATEGORIAN1,
|
||||||
|
Z.SEQCATEGORIAN2,
|
||||||
|
Z.CATEGORIAN2,
|
||||||
|
Z.SEQCATEGORIAN3,
|
||||||
|
Z.CATEGORIAN3,
|
||||||
|
Z.SEQCATEGORIAN4,
|
||||||
|
Z.CATEGORIAN4,
|
||||||
|
Z.SEQCATEGORIAN5,
|
||||||
|
Z.CATEGORIAN5,
|
||||||
|
Z.VLRVENDA,
|
||||||
|
(CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY'))
|
||||||
|
OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN
|
||||||
|
Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF -
|
||||||
|
CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0)
|
||||||
|
FROM MRL_CUSTODIA CD
|
||||||
|
WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END)
|
||||||
|
AND CD.NROEMPRESA = 301
|
||||||
|
AND CD.DTAENTRADASAIDA = (
|
||||||
|
SELECT MAX(CD1.DTAENTRADASAIDA)
|
||||||
|
FROM MRL_CUSTODIA CD1
|
||||||
|
WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO
|
||||||
|
AND CD1.NROEMPRESA = 301
|
||||||
|
AND CD1.DTAENTRADASAIDA <= Z.DTA
|
||||||
|
)
|
||||||
|
)) - Z.VLR_IMP_VENDA
|
||||||
|
ELSE
|
||||||
|
Z.VLRCONTRIB
|
||||||
|
END) AS VLRCONTRIB,
|
||||||
|
Z.VLRVENDA_MES_ANT,
|
||||||
|
Z.VLRCONTRIB_MES_ANT,
|
||||||
|
Z.VLRVENDA_ANO_ANT,
|
||||||
|
Z.VLRCONTRIB_ANO_ANT,
|
||||||
|
Z.QTDE_VENDA,
|
||||||
|
Z.VLR_IMP_VENDA,
|
||||||
|
Z.PROPQTDPRODUTOBASE
|
||||||
|
FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/
|
||||||
|
TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA,
|
||||||
|
V.NROEMPRESA,
|
||||||
|
E.NOMEFANTASIA 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MAP_FAMDIVCATEG DC2
|
||||||
|
JOIN 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 MRL_CUSTODIA Y
|
||||||
|
JOIN MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA
|
||||||
|
JOIN MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO
|
||||||
|
JOIN MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO
|
||||||
|
JOIN MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO
|
||||||
|
JOIN MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1
|
||||||
|
JOIN MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA )
|
||||||
|
JOIN MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO
|
||||||
|
JOIN MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA
|
||||||
|
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 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.NOMEFANTASIA
|
||||||
|
, V.NRODIVISAO
|
||||||
|
, V.NROSEGMENTO
|
||||||
|
, V.SEQPRODUTO
|
||||||
|
, A.SEQPRODUTOBASE
|
||||||
|
, A.SEQFAMILIA
|
||||||
|
, A.DESCCOMPLETA
|
||||||
|
, CC1.SEQCATEGORIA
|
||||||
|
, CC1.CATEGORIA) Z
|
||||||
|
) LOOP
|
||||||
|
|
||||||
|
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA);
|
||||||
|
|
||||||
|
IF r.SEQCATEGORIAN1 IS NOT NULL THEN
|
||||||
|
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA);
|
||||||
|
ELSE v_id_cat1 := v_id_empresa; END IF;
|
||||||
|
|
||||||
|
IF r.SEQCATEGORIAN2 IS NOT NULL THEN
|
||||||
|
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA);
|
||||||
|
ELSE v_id_cat2 := v_id_cat1; END IF;
|
||||||
|
|
||||||
|
IF r.SEQCATEGORIAN3 IS NOT NULL THEN
|
||||||
|
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA);
|
||||||
|
ELSE v_id_cat3 := v_id_cat2; END IF;
|
||||||
|
|
||||||
|
IF r.SEQCATEGORIAN4 IS NOT NULL THEN
|
||||||
|
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA);
|
||||||
|
ELSE v_id_cat4 := v_id_cat3; END IF;
|
||||||
|
|
||||||
|
IF r.SEQCATEGORIAN5 IS NOT NULL THEN
|
||||||
|
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA);
|
||||||
|
ELSE v_id_cat5 := v_id_cat4; END IF;
|
||||||
|
|
||||||
|
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE);
|
||||||
|
|
||||||
|
INSERT INTO TB_FLASH_FATO_CONTRIBUICAO (
|
||||||
|
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
|
||||||
|
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
|
||||||
|
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
|
||||||
|
vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro
|
||||||
|
) VALUES (
|
||||||
|
SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL,
|
||||||
|
r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA),
|
||||||
|
TO_NUMBER(TO_CHAR(r.DTA, 'D')),
|
||||||
|
v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO,
|
||||||
|
r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA,
|
||||||
|
r.QTDE_VENDA, r.VLRCONTRIB,
|
||||||
|
CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END,
|
||||||
|
r.PROPQTDPRODUTOBASE, SYSDATE
|
||||||
|
);
|
||||||
|
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE '
|
||||||
|
CREATE TABLE TB_FLASH_META_CONTRIBUICAO_STG (
|
||||||
|
COD_EMPRESA NUMBER NOT NULL,
|
||||||
|
TIPO_NODO VARCHAR2(30) NOT NULL,
|
||||||
|
CODIGO_NODO VARCHAR2(60) NOT NULL,
|
||||||
|
CODIGO_NODO_PAI VARCHAR2(60),
|
||||||
|
TIPO_NODO_PAI VARCHAR2(30),
|
||||||
|
DATA_REFERENCIA DATE NOT NULL,
|
||||||
|
ANO_REFERENCIA NUMBER(4) NOT NULL,
|
||||||
|
MES_REFERENCIA NUMBER(2) NOT NULL,
|
||||||
|
DIA_REFERENCIA NUMBER(2) NOT NULL,
|
||||||
|
PERCENTUAL_META NUMBER(10,4),
|
||||||
|
VALOR_META NUMBER(18,6),
|
||||||
|
OBSERVACAO VARCHAR2(500),
|
||||||
|
ORIGEM_META VARCHAR2(100),
|
||||||
|
DATA_CARGA DATE DEFAULT SYSDATE,
|
||||||
|
CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
|
||||||
|
CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL),
|
||||||
|
CONSTRAINT CK_TB_FLASH_META_CTB_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
|
||||||
|
CONSTRAINT CK_TB_FLASH_META_CTB_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
|
||||||
|
)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_01';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_01 ON TB_FLASH_META_CONTRIBUICAO_STG (COD_EMPRESA, DATA_REFERENCIA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_02';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_02 ON TB_FLASH_META_CONTRIBUICAO_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_03';
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_03 ON TB_FLASH_META_CONTRIBUICAO_STG (ORIGEM_META)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_CONTRIBUICAO_STG CASCADE CONSTRAINTS PURGE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
CREATE OR REPLACE VIEW VW_FLASH_META_CONTRIBUICAO_STG AS
|
||||||
|
SELECT m1.empresa_fk AS cod_empresa, 'CATEGORIA' AS tipo_nodo, TO_CHAR(m1.categoria_fk) AS codigo_nodo,
|
||||||
|
TO_CHAR(m1.categoria_pai_fk) AS codigo_nodo_pai, 'CATEGORIA' AS tipo_nodo_pai,
|
||||||
|
m1.data_referencia, m1.ano AS ano_referencia, m1.mes AS mes_referencia, m1.dia AS dia_referencia,
|
||||||
|
m1.percentual AS percentual_meta, m1.valor_meta, 'TB_METAS_CONTRIB_CATN1' AS observacao, 'TB_METAS_CONTRIB_CATN1' AS origem_meta
|
||||||
|
FROM vitruvio.TB_METAS_CONTRIB_CATN1 m1
|
||||||
|
UNION ALL
|
||||||
|
SELECT m2.empresa_fk, 'CATEGORIA', TO_CHAR(m2.categoria_fk), TO_CHAR(m2.categoria_pai_fk), 'CATEGORIA',
|
||||||
|
m2.data_referencia, m2.ano, m2.mes, m2.dia, m2.percentual, m2.valor_meta, 'TB_METAS_CONTRIB_CATN2', 'TB_METAS_CONTRIB_CATN2'
|
||||||
|
FROM vitruvio.TB_METAS_CONTRIB_CATN2 m2
|
||||||
|
UNION ALL
|
||||||
|
SELECT m3.empresa_fk, 'CATEGORIA', TO_CHAR(m3.categoria_fk), TO_CHAR(m3.categoria_pai_fk), 'CATEGORIA',
|
||||||
|
m3.data_referencia, m3.ano, m3.mes, m3.dia, m3.percentual, m3.valor_meta, 'TB_METAS_CONTRIB_CATN3', 'TB_METAS_CONTRIB_CATN3'
|
||||||
|
FROM vitruvio.TB_METAS_CONTRIB_CATN3 m3
|
||||||
|
UNION ALL
|
||||||
|
SELECT m4.empresa_fk, 'CATEGORIA', TO_CHAR(m4.categoria_fk), TO_CHAR(m4.categoria_pai_fk), 'CATEGORIA',
|
||||||
|
m4.data_referencia, m4.ano, m4.mes, m4.dia, m4.percentual, m4.valor_meta, 'TB_METAS_CONTRIB_CATN4', 'TB_METAS_CONTRIB_CATN4'
|
||||||
|
FROM vitruvio.TB_METAS_CONTRIB_CATN4 m4
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_CONTRIBUICAO_STG' AND object_type = 'VIEW';
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_CONTRIBUICAO_STG';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ BEGIN
|
|||||||
NRODIVISAO NUMBER,
|
NRODIVISAO NUMBER,
|
||||||
NROSEGMENTO NUMBER,
|
NROSEGMENTO NUMBER,
|
||||||
NRO_TICKETS NUMBER(18,6),
|
NRO_TICKETS NUMBER(18,6),
|
||||||
VLR_IMP_VENDA NUMBER(18,6),
|
VLR_IMP_VNEDA NUMBER(18,6),
|
||||||
QTDE_VENDA NUMBER(18,6),
|
QTDE_VENDA NUMBER(18,6),
|
||||||
VLR_VENDA NUMBER(18,6),
|
VLR_VENDA NUMBER(18,6),
|
||||||
VL_TICKET_MEDIO NUMBER(18,6),
|
VL_TICKET_MEDIO NUMBER(18,6),
|
||||||
|
|||||||
+6
-6
@@ -1,6 +1,6 @@
|
|||||||
-- +goose Up
|
-- +goose Up
|
||||||
-- +goose StatementBegin
|
-- +goose StatementBegin
|
||||||
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA (
|
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO_DONO (
|
||||||
p_data_inicial IN DATE,
|
p_data_inicial IN DATE,
|
||||||
p_data_final IN DATE,
|
p_data_final IN DATE,
|
||||||
p_empresa_ini IN NUMBER DEFAULT NULL,
|
p_empresa_ini IN NUMBER DEFAULT NULL,
|
||||||
@@ -8,7 +8,7 @@ CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA (
|
|||||||
) AS
|
) AS
|
||||||
v_inicio_execucao DATE := SYSDATE;
|
v_inicio_execucao DATE := SYSDATE;
|
||||||
BEGIN
|
BEGIN
|
||||||
DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS'));
|
DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA_DONO_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS'));
|
||||||
DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY'));
|
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 (
|
FOR r IN (
|
||||||
@@ -58,12 +58,12 @@ BEGIN
|
|||||||
p_data_final => p_data_final
|
p_data_final => p_data_final
|
||||||
);
|
);
|
||||||
|
|
||||||
DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
|
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));
|
DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2));
|
||||||
|
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA: ' || SQLERRM);
|
DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA_DONO: ' || SQLERRM);
|
||||||
RAISE;
|
RAISE;
|
||||||
END;
|
END;
|
||||||
-- +goose StatementEnd
|
-- +goose StatementEnd
|
||||||
@@ -73,9 +73,9 @@ END;
|
|||||||
DECLARE
|
DECLARE
|
||||||
v_count NUMBER;
|
v_count NUMBER;
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
|
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
|
IF v_count > 0 THEN
|
||||||
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA';
|
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO';
|
||||||
END IF;
|
END IF;
|
||||||
END;
|
END;
|
||||||
-- +goose StatementEnd
|
-- +goose StatementEnd
|
||||||
Generated
+4
-4
@@ -9,16 +9,16 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@davinti/jeff": "^1.0.9"
|
"@davinti/jeff": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.21.0"
|
"tsx": "^4.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@davinti/jeff": {
|
"node_modules/@davinti/jeff": {
|
||||||
"version": "1.0.9",
|
"version": "1.0.10",
|
||||||
"resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.9/jeff-1.0.9.tgz",
|
"resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.10/jeff-1.0.10.tgz",
|
||||||
"integrity": "sha512-qrpcShdzY/xUlUCXzcgmRAMWIlEkA4zXhhgdBKPULYxU1l8gS6jKA1h1Bf/omIdE8NTATBC2aTRbgew8NsBv5g==",
|
"integrity": "sha512-feJnWYr175fW6GQHhf+J7/ivfydRb85+6TgC3Qe/3Z+OWOLNxl1jgP4uJC8csi0eeWwu1/8sJ/RE97BIKeADVw==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/glob": "^8.1.0",
|
"@types/glob": "^8.1.0",
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "",
|
"description": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@davinti/jeff": "^1.0.9"
|
"@davinti/jeff": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.21.0"
|
"tsx": "^4.21.0"
|
||||||
|
|||||||
+375
-4
@@ -8,6 +8,102 @@ 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",
|
||||||
|
ai : {
|
||||||
|
topics : {
|
||||||
|
flash_vendas_big : {
|
||||||
|
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.",
|
||||||
|
prompt: {
|
||||||
|
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.",
|
||||||
|
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_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.",
|
||||||
|
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_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.",
|
||||||
|
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_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: {
|
||||||
|
agrupamentos: [
|
||||||
|
{
|
||||||
|
"nome_parametro": "loja",
|
||||||
|
coluna_vtr: "x.codigo"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
filtros: {
|
||||||
|
data_venda: {
|
||||||
|
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.",
|
||||||
|
coluna_vtr: "args.data_venda",
|
||||||
|
tabela_rag: " "
|
||||||
|
},
|
||||||
|
loja: {
|
||||||
|
descricao_agente: "Lista de nomes ou códigos de lojas mencionados para filtragem.",
|
||||||
|
coluna_vtr: "x.nomeempresaapp",
|
||||||
|
tabela_rag: "tb_flash_nodo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}/*,
|
||||||
|
sql: `SELECT
|
||||||
|
${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 ${agrupamento}
|
||||||
|
ORDER BY mes_atual DESC`*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
queries: {
|
queries: {
|
||||||
flash: {
|
flash: {
|
||||||
name: "Flash de Vendas",
|
name: "Flash de Vendas",
|
||||||
@@ -78,8 +174,77 @@ export default moduleFactory
|
|||||||
},
|
},
|
||||||
params: ["data_venda"],
|
params: ["data_venda"],
|
||||||
},
|
},
|
||||||
|
flash_categorias: {
|
||||||
|
name: "Flash de Vendas por Categorias",
|
||||||
|
display: {
|
||||||
|
type: "flash",
|
||||||
|
settings: {
|
||||||
|
group_column: "categoriaapp",
|
||||||
|
total_indicator_column: "is_total",
|
||||||
|
null_label_key: "Geral",
|
||||||
},
|
},
|
||||||
entrypoint: "flash",
|
header: {
|
||||||
|
title_column: "categoriaapp",
|
||||||
|
value_column: "venda_dia",
|
||||||
|
value_format: "currency",
|
||||||
|
},
|
||||||
|
rows: [
|
||||||
|
{
|
||||||
|
label: "Meta Mês",
|
||||||
|
column: "meta_mes",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Mês Atual",
|
||||||
|
column: "mes_atual",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Dif ($)",
|
||||||
|
column: "dif_mes_atual",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "% Variação",
|
||||||
|
column: "variacao_atual",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Mês Anterior",
|
||||||
|
column: "mes_anterior",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Dif ($)",
|
||||||
|
column: "dif_mes_anterior",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "% Variação",
|
||||||
|
column: "variacao_mes_anterior",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Ano Anterior",
|
||||||
|
column: "ano_anterior",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Dif ($)",
|
||||||
|
column: "dif_ano_anterior",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "% Variação",
|
||||||
|
column: "variacao_ano_anterior",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
params: ["data_venda", "codigo_categoria_pai", "cod_empresa"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entrypoint: "flash" as "flash" | "flash_categorias",
|
||||||
})
|
})
|
||||||
.withImplementations({
|
.withImplementations({
|
||||||
C5: {
|
C5: {
|
||||||
@@ -113,15 +278,37 @@ group by rollup(canalapp, nomeempresaapp)
|
|||||||
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ `
|
||||||
|
select
|
||||||
|
'Categorias' as categoriaapp,
|
||||||
|
1 as is_total,
|
||||||
|
0 as venda_dia,
|
||||||
|
0 as meta_mes,
|
||||||
|
0 as mes_atual,
|
||||||
|
0 as dif_mes_atual,
|
||||||
|
0 as variacao_atual,
|
||||||
|
0 as mes_anterior,
|
||||||
|
0 as dif_mes_anterior,
|
||||||
|
0 as variacao_mes_anterior,
|
||||||
|
0 as ano_anterior,
|
||||||
|
0 as dif_ano_anterior,
|
||||||
|
0 as variacao_ano_anterior
|
||||||
|
from dual
|
||||||
|
where 1 = 0`,
|
||||||
|
};
|
||||||
|
},
|
||||||
},
|
},
|
||||||
C5_big: {flash: (args) => {
|
C5_big: {flash: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ `
|
sql: /*sql*/ `
|
||||||
SELECT
|
SELECT
|
||||||
'Lojas' AS canalapp,
|
'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.codigo) = 1 THEN 1
|
||||||
ELSE 0
|
ELSE 0
|
||||||
END AS is_total,
|
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_meta_efetiva ELSE 0 END) AS meta_mes,
|
||||||
@@ -180,6 +367,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
n.id_nodo = r.id_nodo
|
n.id_nodo = r.id_nodo
|
||||||
WHERE
|
WHERE
|
||||||
n.tipo_nodo = 'EMPRESA'
|
n.tipo_nodo = 'EMPRESA'
|
||||||
|
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
|
||||||
AND (
|
AND (
|
||||||
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
|
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)
|
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
|
||||||
@@ -189,11 +377,194 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
)
|
)
|
||||||
) x
|
) x
|
||||||
GROUP BY
|
GROUP BY
|
||||||
ROLLUP(x.nomeempresaapp)
|
GROUPING SETS (
|
||||||
|
(x.codigo, x.nomeempresaapp),
|
||||||
|
()
|
||||||
|
)
|
||||||
|
`,};
|
||||||
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ `
|
||||||
|
WITH params AS (
|
||||||
|
SELECT
|
||||||
|
TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS data_venda,
|
||||||
|
${args.codigo_categoria_pai} AS codigo_categoria_pai,
|
||||||
|
${args.cod_empresa} AS cod_empresa
|
||||||
|
FROM dual
|
||||||
|
),
|
||||||
|
nodo_pai_param AS (
|
||||||
|
SELECT n.*
|
||||||
|
FROM tb_flash_nodo n
|
||||||
|
CROSS JOIN params p
|
||||||
|
WHERE p.codigo_categoria_pai IS NOT NULL
|
||||||
|
AND n.tipo_nodo = 'CATEGORIA'
|
||||||
|
AND n.codigo = p.codigo_categoria_pai
|
||||||
|
and (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 canalapp,
|
||||||
|
|
||||||
|
x.codigo AS cod_empresa,
|
||||||
|
|
||||||
|
x.nomeempresaapp AS nomeempresaapp,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN GROUPING(x.codigo) = 1 THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS is_total,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_atual,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_ano_anterior
|
||||||
|
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
cat.codigo AS codigo,
|
||||||
|
cat.nome AS nomeempresaapp,
|
||||||
|
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
|
||||||
`,};
|
`,};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
C5_mambo: {flash: (args) => {
|
C5_mambo: {flash: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ ``,};
|
||||||
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ ``,};
|
sql: /*sql*/ ``,};
|
||||||
},
|
},
|
||||||
@@ -212,7 +583,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
{
|
{
|
||||||
name: "Procedure que atualiza os dados do flash",
|
name: "Procedure que atualiza os dados do flash",
|
||||||
command: /*sql*/ `BEGIN
|
command: /*sql*/ `BEGIN
|
||||||
PRC_FLASH_ATUALIZA_VENDA(
|
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,
|
||||||
|
|||||||
@@ -0,0 +1,221 @@
|
|||||||
|
import { createModuleFactory } from "@davinti/jeff";
|
||||||
|
|
||||||
|
const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]);
|
||||||
|
|
||||||
|
export default moduleFactory
|
||||||
|
.createModule({
|
||||||
|
id: "flash-de-contribuicao",
|
||||||
|
description: "Flash de Contribuição",
|
||||||
|
label: "Flash de Contribuição",
|
||||||
|
icon: "bar-chart",
|
||||||
|
queries: {
|
||||||
|
flashContribuicao: {
|
||||||
|
name: "Flash de Contribuição",
|
||||||
|
display: {
|
||||||
|
type: "flash",
|
||||||
|
settings: {
|
||||||
|
group_column: "canalapp",
|
||||||
|
total_indicator_column: "is_total",
|
||||||
|
null_label_key: "Geral",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
title_column: "canalapp",
|
||||||
|
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"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entrypoint: "flashContribuicao",
|
||||||
|
})
|
||||||
|
.withImplementations({
|
||||||
|
C5: {
|
||||||
|
flashContribuicao: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ ``,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
C5_big: {
|
||||||
|
flashContribuicao: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ `
|
||||||
|
SELECT
|
||||||
|
'Lojas' 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.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_contribuicao ELSE 0 END) AS mes_atual,
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_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.valor_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.valor_contribuicao ELSE 0 END) AS mes_anterior,
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_mes_anterior,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) /
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_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.valor_contribuicao ELSE 0 END) AS ano_anterior,
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_ano_anterior,
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) /
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_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.valor_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),
|
||||||
|
()
|
||||||
|
)
|
||||||
|
`,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
C5_mambo: {
|
||||||
|
flashContribuicao: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ ``,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).withSchedules({
|
||||||
|
C5: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash de contribuição",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
C5_big: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash de contribuição",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO(
|
||||||
|
p_data_inicial => TRUNC(SYSDATE) - 30,
|
||||||
|
p_data_final => TRUNC(SYSDATE),
|
||||||
|
p_empresa_ini => 1,
|
||||||
|
p_empresa_fim => 10
|
||||||
|
);
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
C5_mambo: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash de contribuição",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
@@ -9,7 +9,7 @@ export default moduleFactory
|
|||||||
label: "Flash de Perdas",
|
label: "Flash de Perdas",
|
||||||
icon: "bar-chart",
|
icon: "bar-chart",
|
||||||
queries: {
|
queries: {
|
||||||
flash: {
|
flashPerdas: {
|
||||||
name: "Flash de Perdas",
|
name: "Flash de Perdas",
|
||||||
display: {
|
display: {
|
||||||
type: "flash",
|
type: "flash",
|
||||||
@@ -78,12 +78,81 @@ export default moduleFactory
|
|||||||
},
|
},
|
||||||
params: ["data_perda"],
|
params: ["data_perda"],
|
||||||
},
|
},
|
||||||
|
flash_categorias: {
|
||||||
|
name: "Flash de Perdas por Categorias",
|
||||||
|
display: {
|
||||||
|
type: "flash",
|
||||||
|
settings: {
|
||||||
|
group_column: "categoriaapp",
|
||||||
|
total_indicator_column: "is_total",
|
||||||
|
null_label_key: "Geral",
|
||||||
},
|
},
|
||||||
entrypoint: "flash",
|
header: {
|
||||||
|
title_column: "categoriaapp",
|
||||||
|
value_column: "perda_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_perda", "codigo_categoria_pai", "cod_empresa"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entrypoint: "flashPerdas" as "flashPerdas" | "flash_categorias",
|
||||||
})
|
})
|
||||||
.withImplementations({
|
.withImplementations({
|
||||||
C5: {
|
C5: {
|
||||||
flash: (args) => {
|
flashPerdas: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ `
|
sql: /*sql*/ `
|
||||||
select
|
select
|
||||||
@@ -113,8 +182,29 @@ group by rollup(canalapp, nomeempresaapp)
|
|||||||
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
|
return {
|
||||||
|
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`,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
C5_big: {flash: (args) => {
|
},
|
||||||
|
C5_big: {flashPerdas: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ `
|
sql: /*sql*/ `
|
||||||
SELECT
|
SELECT
|
||||||
@@ -174,7 +264,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
THEN 'ANO_ANTERIOR'
|
THEN 'ANO_ANTERIOR'
|
||||||
END AS periodo
|
END AS periodo
|
||||||
FROM
|
FROM
|
||||||
tb_flash_nodo_resumo_venda r
|
tb_flash_nodo_resumo_perda r
|
||||||
JOIN tb_flash_nodo n
|
JOIN tb_flash_nodo n
|
||||||
ON
|
ON
|
||||||
n.id_nodo = r.id_nodo
|
n.id_nodo = r.id_nodo
|
||||||
@@ -192,10 +282,226 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
ROLLUP(x.nomeempresaapp)
|
ROLLUP(x.nomeempresaapp)
|
||||||
`,};
|
`,};
|
||||||
},
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ `
|
||||||
|
WITH params AS (
|
||||||
|
SELECT
|
||||||
|
TO_DATE(${args.data_perda}, 'YYYY-MM-DD') AS data_perda,
|
||||||
|
${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.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS perda_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_venda ELSE 0 END) AS mes_atual,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_atual,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_mes_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
|
||||||
|
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) -
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
|
||||||
|
ELSE ROUND(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END)
|
||||||
|
/
|
||||||
|
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)
|
||||||
|
) * 100
|
||||||
|
) - 100
|
||||||
|
, 2)
|
||||||
|
END AS variacao_ano_anterior
|
||||||
|
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
cat.codigo AS codigo,
|
||||||
|
cat.nome AS nomeempresaapp,
|
||||||
|
cat.tipo_nodo,
|
||||||
|
r.valor_meta_efetiva,
|
||||||
|
r.valor_venda,
|
||||||
|
CASE
|
||||||
|
WHEN r.data_referencia BETWEEN TRUNC(p.data_perda, 'MM') AND p.data_perda
|
||||||
|
THEN 'ATUAL'
|
||||||
|
|
||||||
|
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -1)
|
||||||
|
AND ADD_MONTHS(p.data_perda, -1)
|
||||||
|
THEN 'MES_ANTERIOR'
|
||||||
|
|
||||||
|
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -12)
|
||||||
|
AND ADD_MONTHS(p.data_perda, -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_perda, 'MM') AND p.data_perda
|
||||||
|
|
||||||
|
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -1)
|
||||||
|
AND ADD_MONTHS(p.data_perda, -1)
|
||||||
|
|
||||||
|
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -12)
|
||||||
|
AND ADD_MONTHS(p.data_perda, -12)
|
||||||
|
)
|
||||||
|
) x
|
||||||
|
|
||||||
|
GROUP BY
|
||||||
|
GROUPING SETS (
|
||||||
|
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
ORDER BY
|
||||||
|
is_total,
|
||||||
|
nomeempresaapp
|
||||||
|
`,};
|
||||||
},
|
},
|
||||||
C5_mambo: {flash: (args) => {
|
},
|
||||||
|
C5_mambo: {flashPerdas: (args) => {
|
||||||
|
return {
|
||||||
|
sql: /*sql*/ ``,};
|
||||||
|
},
|
||||||
|
flash_categorias: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ ``,};
|
sql: /*sql*/ ``,};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}).withSchedules({
|
||||||
|
C5: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
C5_big: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
PRC_FLASH_ATUALIZA_PERDA_DONO(
|
||||||
|
p_data_inicial => TRUNC(SYSDATE) - 30,
|
||||||
|
p_data_final => TRUNC(SYSDATE),
|
||||||
|
p_empresa_ini => 1,
|
||||||
|
p_empresa_fim => 10
|
||||||
|
);
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
C5_mambo: [
|
||||||
|
{
|
||||||
|
name: "Procedure que atualiza os dados do flash",
|
||||||
|
command: /*sql*/ `BEGIN
|
||||||
|
END`,
|
||||||
|
cron: "0 * * * *",
|
||||||
|
timeout_seconds: 2400,
|
||||||
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user