Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f6201f0af |
@@ -0,0 +1,26 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_SEQUENCES
|
||||||
|
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_PERDAS
|
||||||
|
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_SEQUENCES
|
||||||
|
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_FLASH_PERDAS';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TABLES
|
||||||
|
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_PERDAS (
|
||||||
|
ID NUMBER NOT NULL
|
||||||
|
CONSTRAINT PK_FLASH_PERDAS PRIMARY KEY,
|
||||||
|
NUMERO_LOJA NUMBER(10) NOT NULL,
|
||||||
|
NOME_LOJA VARCHAR2(200) NOT NULL,
|
||||||
|
CODIGO_CATEGORIA_N1 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N1 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N2 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N2 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N3 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N3 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N4 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N4 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N5 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N5 VARCHAR2(200),
|
||||||
|
CODIGO_PRODUTO VARCHAR2(50),
|
||||||
|
NOME_PRODUTO VARCHAR2(400),
|
||||||
|
DATA_PERDA DATE NOT NULL,
|
||||||
|
ANO NUMBER(4) NOT NULL,
|
||||||
|
MES NUMBER(2) NOT NULL,
|
||||||
|
DIA NUMBER(2) NOT NULL,
|
||||||
|
DIA_SEMANA NUMBER(1),
|
||||||
|
VALOR_PERDA NUMBER(18,4),
|
||||||
|
CUSTO NUMBER(18,4),
|
||||||
|
QTD_PERDA NUMBER(10),
|
||||||
|
DATAINC DATE DEFAULT SYSDATE NOT NULL,
|
||||||
|
DATAALT DATE DEFAULT SYSDATE NOT NULL
|
||||||
|
)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TABLES
|
||||||
|
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_PERDAS CASCADE CONSTRAINTS PURGE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TRIGGERS
|
||||||
|
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_PERDAS_BI
|
||||||
|
BEFORE INSERT ON TB_FLASH_PERDAS
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF :NEW.ID IS NULL THEN
|
||||||
|
:NEW.ID := SEQ_FLASH_PERDAS.NEXTVAL;
|
||||||
|
END IF;
|
||||||
|
END;';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TRIGGERS
|
||||||
|
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_PERDAS_BI';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_INDEXES
|
||||||
|
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_PERDAS_01
|
||||||
|
ON TB_FLASH_PERDAS (NUMERO_LOJA, DATA_PERDA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_INDEXES
|
||||||
|
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_PERDAS_01';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
-- +goose Up
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''Flash de perdas por loja, produto e data''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_PERDAS''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''Código numérico da loja''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''Data do registro de perda''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''Valor monetário da perda (4 casas decimais)''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''Quantidade perdida (inteiro)''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''Custo unitário do produto no momento da perda''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''Data/hora de inclusão do registro''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''Data/hora da última alteração do registro''';
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''''';
|
||||||
|
END;
|
||||||
@@ -0,0 +1,300 @@
|
|||||||
|
-- +goose Up
|
||||||
|
-- +goose StatementBegin
|
||||||
|
CREATE OR REPLACE PROCEDURE PRC_CARREGA_FLASH_PERDAS (
|
||||||
|
p_data_inicial IN DATE,
|
||||||
|
p_data_final IN DATE,
|
||||||
|
p_reprocessar IN VARCHAR2 DEFAULT 'S'
|
||||||
|
)
|
||||||
|
IS
|
||||||
|
BEGIN
|
||||||
|
IF p_reprocessar = 'S' THEN
|
||||||
|
DELETE FROM TB_FLASH_PERDAS
|
||||||
|
WHERE DATA_PERDA BETWEEN p_data_inicial AND p_data_final;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO TB_FLASH_PERDAS (
|
||||||
|
ID,
|
||||||
|
NUMERO_LOJA,
|
||||||
|
NOME_LOJA,
|
||||||
|
CODIGO_CATEGORIA_N1,
|
||||||
|
NOME_CATEGORIA_N1,
|
||||||
|
CODIGO_CATEGORIA_N2,
|
||||||
|
NOME_CATEGORIA_N2,
|
||||||
|
CODIGO_CATEGORIA_N3,
|
||||||
|
NOME_CATEGORIA_N3,
|
||||||
|
CODIGO_CATEGORIA_N4,
|
||||||
|
NOME_CATEGORIA_N4,
|
||||||
|
CODIGO_CATEGORIA_N5,
|
||||||
|
NOME_CATEGORIA_N5,
|
||||||
|
CODIGO_PRODUTO,
|
||||||
|
NOME_PRODUTO,
|
||||||
|
DATA_PERDA,
|
||||||
|
ANO,
|
||||||
|
MES,
|
||||||
|
DIA,
|
||||||
|
DIA_SEMANA,
|
||||||
|
VALOR_PERDA,
|
||||||
|
CUSTO,
|
||||||
|
QTD_PERDA,
|
||||||
|
DATAINC,
|
||||||
|
DATAALT
|
||||||
|
)
|
||||||
|
WITH cat_base AS (
|
||||||
|
SELECT
|
||||||
|
pc.seqproduto,
|
||||||
|
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_produto pc
|
||||||
|
JOIN consinco.map_familia fc
|
||||||
|
ON fc.seqfamilia = pc.seqfamilia
|
||||||
|
JOIN consinco.map_famdivcateg dc
|
||||||
|
ON dc.seqfamilia = fc.seqfamilia
|
||||||
|
AND dc.nrodivisao = 1
|
||||||
|
AND dc.status = 'A'
|
||||||
|
JOIN consinco.map_categoria cc
|
||||||
|
ON cc.nrodivisao = dc.nrodivisao
|
||||||
|
AND cc.seqcategoria = dc.seqcategoria
|
||||||
|
AND cc.tipcategoria = 'M'
|
||||||
|
AND cc.statuscategor = 'A'
|
||||||
|
AND cc.nivelhierarquia BETWEEN 1 AND 5
|
||||||
|
GROUP BY pc.seqproduto
|
||||||
|
),
|
||||||
|
custo_base AS (
|
||||||
|
SELECT
|
||||||
|
cd.seqproduto,
|
||||||
|
cd.nroempresa,
|
||||||
|
cd.dtaentradasaida,
|
||||||
|
(cd.cmdiavlrnf
|
||||||
|
+ cd.cmdiaipi
|
||||||
|
+ cd.cmdiaicmsst
|
||||||
|
+ cd.cmdiadespnf
|
||||||
|
+ cd.cmdiadespforanf
|
||||||
|
- cd.cmdiacredicms
|
||||||
|
- cd.cmdiacredicmspresum
|
||||||
|
- cd.cmdiacredicmsantecip
|
||||||
|
- cd.cmdiacredpis
|
||||||
|
- cd.cmdiacredcofins
|
||||||
|
- cd.cmdiadctoforanf) AS custo_dia
|
||||||
|
FROM consinco.mrl_custodia cd
|
||||||
|
),
|
||||||
|
inner_query AS (
|
||||||
|
SELECT
|
||||||
|
e.nroempresa AS empresa,
|
||||||
|
e.nomereduzido AS nomeempresa,
|
||||||
|
cat.codcatn1,
|
||||||
|
cat.nomecatn1,
|
||||||
|
cat.codcatn2,
|
||||||
|
cat.nomecatn2,
|
||||||
|
cat.codcatn3,
|
||||||
|
cat.nomecatn3,
|
||||||
|
cat.codcatn4,
|
||||||
|
cat.nomecatn4,
|
||||||
|
cat.codcatn5,
|
||||||
|
cat.nomecatn5,
|
||||||
|
c.seqproduto AS cod_produto,
|
||||||
|
a.desccompleta AS descricao,
|
||||||
|
a.seqprodutobase,
|
||||||
|
vw.dtaentradasaida AS data_venda,
|
||||||
|
SUM(vw.vlrctoliquido) AS custo_liq_na_loja,
|
||||||
|
SUM(vw.valorlancto) AS perda,
|
||||||
|
SUM(vw.qtdlancto) AS qtde_perda_unit,
|
||||||
|
(
|
||||||
|
SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
|
||||||
|
(e.pericmsestimativa + e.peroutroimposto + e.percpmf + e.perir +
|
||||||
|
DECODE(e.indfaturaiss, 'S', e.perciss, 0) +
|
||||||
|
DECODE(e.indfaturaipi || b.indcalcipisaida, 'SS', b.peraliquotaipi, 0)) / 100)
|
||||||
|
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
|
||||||
|
(t3.peraliquota * t3.pertributado / 100) / 100)
|
||||||
|
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
|
||||||
|
DECODE(b.indisentopis, 'S', 0,
|
||||||
|
DECODE(b.indisentodebpiscofins, 'S', 0, e.perpis)) / 100)
|
||||||
|
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
|
||||||
|
DECODE(b.indisentopis, 'S', 0,
|
||||||
|
DECODE(b.indisentodebpiscofins, 'S', 0, e.percofins)) / 100)
|
||||||
|
) AS vlrimpostovda,
|
||||||
|
CASE
|
||||||
|
WHEN cat.codcatn2 IN (15458, 18080)
|
||||||
|
AND cat.codcatn3 NOT IN (17696, 18007, 17182)
|
||||||
|
THEN
|
||||||
|
SUM(
|
||||||
|
vw.qtdlancto * (
|
||||||
|
SELECT cx.custo_dia
|
||||||
|
FROM custo_base cx
|
||||||
|
WHERE cx.seqproduto = COALESCE(a.seqprodutobase, c.seqproduto)
|
||||||
|
AND cx.nroempresa = 301
|
||||||
|
AND cx.dtaentradasaida = (
|
||||||
|
SELECT MAX(cx2.dtaentradasaida)
|
||||||
|
FROM custo_base cx2
|
||||||
|
WHERE cx2.seqproduto = cx.seqproduto
|
||||||
|
AND cx2.nroempresa = 301
|
||||||
|
AND cx2.dtaentradasaida <= vw.dtaentradasaida
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
ELSE SUM(vw.valorlancto)
|
||||||
|
END AS perda_novo
|
||||||
|
FROM
|
||||||
|
maxv_categoria gs,
|
||||||
|
map_famdivcateg us,
|
||||||
|
map_famdivcateg w,
|
||||||
|
map_famdivisao d,
|
||||||
|
max_empresa e,
|
||||||
|
max_divisao i2,
|
||||||
|
map_classifabc z2,
|
||||||
|
maxv_abcperdabase vw,
|
||||||
|
map_tributacaouf t3,
|
||||||
|
map_familia b,
|
||||||
|
mad_famsegmento h,
|
||||||
|
map_famembalagem k,
|
||||||
|
mrl_produtoempresa c,
|
||||||
|
mrl_prodempseg c3,
|
||||||
|
map_produto a,
|
||||||
|
mad_segmento se,
|
||||||
|
map_produto pr,
|
||||||
|
cat_base cat,
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
a.seqproduto,
|
||||||
|
a.nroempresa,
|
||||||
|
SUM(a.estqloja) AS estqloja,
|
||||||
|
SUM(a.estqdeposito) AS estqdeposito,
|
||||||
|
SUM(a.estqtroca) AS estqtroca,
|
||||||
|
SUM(a.estqalmoxarifado) AS estqalmoxarifado,
|
||||||
|
SUM(a.estqoutro) AS estqoutro,
|
||||||
|
SUM(
|
||||||
|
NVL(a.cmultvlrdescpistransf, 0) +
|
||||||
|
NVL(a.cmultvlrdesccofinstransf, 0) +
|
||||||
|
NVL(a.cmultvlrdescicmstransf, 0) +
|
||||||
|
NVL(a.cmultvlrdescipitransf, 0) +
|
||||||
|
NVL(a.cmultvlrdesclucrotransf, 0) +
|
||||||
|
NVL(a.cmultvlrdescverbatransf, 0) +
|
||||||
|
NVL(a.cmultvlrdescdiferencatransf, 0)
|
||||||
|
) AS vlrdesctransfcb
|
||||||
|
FROM mrl_produtoempresa a
|
||||||
|
GROUP BY a.seqproduto, a.nroempresa
|
||||||
|
) sx,
|
||||||
|
(
|
||||||
|
SELECT MAX(dx.utilacresccustprodrelac) AS utilacresccustprodrelac
|
||||||
|
FROM max_divisao dx
|
||||||
|
JOIN max_empresa ex
|
||||||
|
ON ex.nrodivisao = dx.nrodivisao
|
||||||
|
) i3
|
||||||
|
WHERE
|
||||||
|
e.nroempresa = vw.nroempresa
|
||||||
|
AND e.nrodivisao = d.nrodivisao
|
||||||
|
AND h.seqfamilia = vw.seqfamilia
|
||||||
|
AND h.nrosegmento = e.nrosegmentoprinc
|
||||||
|
AND h.nrosegmento = se.nrosegmento
|
||||||
|
AND d.seqfamilia = vw.seqfamilia
|
||||||
|
AND d.nrodivisao IN (1)
|
||||||
|
AND b.seqfamilia = vw.seqfamilia
|
||||||
|
AND i2.nrodivisao = d.nrodivisao
|
||||||
|
AND z2.nrosegmento = h.nrosegmento
|
||||||
|
AND z2.classifcomercabc = h.classifcomercabc
|
||||||
|
AND k.seqfamilia = h.seqfamilia
|
||||||
|
AND a.seqproduto = c.seqproduto
|
||||||
|
AND k.qtdembalagem = h.padraoembvenda
|
||||||
|
AND c.seqproduto = vw.seqproduto
|
||||||
|
AND c.nroempresa = NVL(e.nroempcustoabc, e.nroempresa)
|
||||||
|
AND c3.nroempresa = vw.nroempresa
|
||||||
|
AND c3.seqproduto = vw.seqproduto
|
||||||
|
AND c3.nrosegmento = e.nrosegmentoprinc
|
||||||
|
AND c3.qtdembalagem = h.padraoembvenda
|
||||||
|
AND t3.nrotributacao = d.nrotributacao
|
||||||
|
AND t3.ufempresa = e.uf
|
||||||
|
AND t3.ufclientefornec = e.uf
|
||||||
|
AND t3.tiptributacao = DECODE(i2.tipdivisao, 'V', 'SN', 'SC')
|
||||||
|
AND t3.nroregtributacao = NVL(e.nroregtributacao, 0)
|
||||||
|
AND pr.seqproduto = vw.seqproduto
|
||||||
|
AND sx.seqproduto = vw.seqproduto
|
||||||
|
AND sx.nroempresa = vw.nroempresa
|
||||||
|
AND cat.seqproduto = vw.seqproduto
|
||||||
|
AND vw.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
|
||||||
|
AND vw.nroempresa IN (
|
||||||
|
SELECT CODIGO
|
||||||
|
FROM VITRUVIO.vi_lojas
|
||||||
|
WHERE codigo NOT IN (301, 401, 500)
|
||||||
|
)
|
||||||
|
AND vw.tipclassinterno IN ('P', 'R', 'C', 'A')
|
||||||
|
AND vw.tiplancto IN ('S')
|
||||||
|
AND gs.nrodivisao = us.nrodivisao
|
||||||
|
AND gs.nivelhierarquia = 2
|
||||||
|
AND gs.tipcategoria = 'M'
|
||||||
|
AND gs.statuscategor != 'I'
|
||||||
|
AND us.seqfamilia = d.seqfamilia
|
||||||
|
AND us.nrodivisao = d.nrodivisao
|
||||||
|
AND us.seqcategoria = gs.seqcategoria
|
||||||
|
AND us.status = 'A'
|
||||||
|
AND w.seqfamilia = d.seqfamilia
|
||||||
|
AND w.nrodivisao = d.nrodivisao
|
||||||
|
AND w.status = 'A'
|
||||||
|
AND w.seqcategoria IN (14772, 15450)
|
||||||
|
GROUP BY
|
||||||
|
e.nroempresa,
|
||||||
|
e.nomereduzido,
|
||||||
|
gs.seqcategoria,
|
||||||
|
gs.caminhocompleto,
|
||||||
|
SUBSTR(e.nomereduzido || ' : ' || gs.caminhocompleto, 1, 250),
|
||||||
|
c.seqproduto,
|
||||||
|
a.seqprodutobase,
|
||||||
|
a.desccompleta,
|
||||||
|
vw.dtaentradasaida,
|
||||||
|
cat.codcatn1, cat.nomecatn1,
|
||||||
|
cat.codcatn2, cat.nomecatn2,
|
||||||
|
cat.codcatn3, cat.nomecatn3,
|
||||||
|
cat.codcatn4, cat.nomecatn4,
|
||||||
|
cat.codcatn5, cat.nomecatn5,
|
||||||
|
TO_NUMBER(NULL),
|
||||||
|
NULL
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
SEQ_FLASH_PERDAS.NEXTVAL,
|
||||||
|
iq.empresa,
|
||||||
|
iq.nomeempresa,
|
||||||
|
TO_CHAR(iq.codcatn1),
|
||||||
|
iq.nomecatn1,
|
||||||
|
TO_CHAR(iq.codcatn2),
|
||||||
|
iq.nomecatn2,
|
||||||
|
TO_CHAR(iq.codcatn3),
|
||||||
|
iq.nomecatn3,
|
||||||
|
TO_CHAR(iq.codcatn4),
|
||||||
|
iq.nomecatn4,
|
||||||
|
TO_CHAR(iq.codcatn5),
|
||||||
|
iq.nomecatn5,
|
||||||
|
TO_CHAR(iq.cod_produto),
|
||||||
|
iq.descricao,
|
||||||
|
iq.data_venda,
|
||||||
|
EXTRACT(YEAR FROM iq.data_venda),
|
||||||
|
EXTRACT(MONTH FROM iq.data_venda),
|
||||||
|
EXTRACT(DAY FROM iq.data_venda),
|
||||||
|
(TRUNC(iq.data_venda) - TRUNC(iq.data_venda, 'IW') + 1),
|
||||||
|
iq.perda_novo,
|
||||||
|
iq.custo_liq_na_loja,
|
||||||
|
iq.qtde_perda_unit,
|
||||||
|
SYSDATE,
|
||||||
|
SYSDATE
|
||||||
|
FROM inner_query iq;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
-- +goose StatementBegin
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_CARREGA_FLASH_PERDAS';
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF SQLCODE != -4043 THEN
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
-- +goose StatementEnd
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_SEQUENCES
|
||||||
|
WHERE SEQUENCE_NAME = 'SEQ_FLASH_VENDAS';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_VENDAS
|
||||||
|
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TRIGGERS
|
||||||
|
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_INDEXES
|
||||||
|
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
|
||||||
|
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_INDEXES
|
||||||
|
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_VENDAS_01';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TABLES
|
||||||
|
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_VENDAS (
|
||||||
|
ID NUMBER NOT NULL
|
||||||
|
CONSTRAINT PK_FLASH_VENDAS PRIMARY KEY,
|
||||||
|
NUMERO_LOJA NUMBER(10) NOT NULL,
|
||||||
|
NOME_LOJA VARCHAR2(200) NOT NULL,
|
||||||
|
CODIGO_CATEGORIA_N1 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N1 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N2 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N2 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N3 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N3 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N4 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N4 VARCHAR2(200),
|
||||||
|
CODIGO_CATEGORIA_N5 VARCHAR2(50),
|
||||||
|
NOME_CATEGORIA_N5 VARCHAR2(200),
|
||||||
|
CODIGO_PRODUTO VARCHAR2(50),
|
||||||
|
NOME_PRODUTO VARCHAR2(400),
|
||||||
|
DATA_VENDA DATE NOT NULL,
|
||||||
|
ANO NUMBER(4) NOT NULL,
|
||||||
|
MES NUMBER(2) NOT NULL,
|
||||||
|
DIA NUMBER(2) NOT NULL,
|
||||||
|
DIA_SEMANA NUMBER(1),
|
||||||
|
VALOR_VENDA NUMBER(18,4),
|
||||||
|
CUSTO NUMBER(18,4),
|
||||||
|
QTD_VENDA NUMBER(10),
|
||||||
|
DATAINC DATE DEFAULT SYSDATE NOT NULL,
|
||||||
|
DATAALT DATE DEFAULT SYSDATE NOT NULL
|
||||||
|
)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TABLES
|
||||||
|
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_VENDAS CASCADE CONSTRAINTS PURGE';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TRIGGERS
|
||||||
|
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_VENDAS_BI
|
||||||
|
BEFORE INSERT ON TB_FLASH_VENDAS
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF :NEW.ID IS NULL THEN
|
||||||
|
:NEW.ID := SEQ_FLASH_VENDAS.NEXTVAL;
|
||||||
|
END IF;
|
||||||
|
END;';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_TRIGGERS
|
||||||
|
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
|
||||||
|
|
||||||
|
IF v_count > 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
-- +goose Up
|
||||||
|
DECLARE
|
||||||
|
v_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*) INTO v_count
|
||||||
|
FROM USER_INDEXES
|
||||||
|
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
|
||||||
|
|
||||||
|
IF v_count = 0 THEN
|
||||||
|
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
|
||||||
|
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
SELECT 'down SQL query';
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
-- +goose Up
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_VENDAS IS ''Flash de vendas por loja, produto e data''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_VENDAS''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.NUMERO_LOJA IS ''Código numérico da loja''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATA_VENDA IS ''Data do registro de venda''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.VALOR_VENDA IS ''Valor monetário da venda (4 casas decimais)''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.QTD_VENDA IS ''Quantidade vendida (inteiro)''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.CUSTO IS ''Custo unitário do produto no momento da venda''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAINC IS ''Data/hora de inclusão do registro''';
|
||||||
|
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAALT IS ''Data/hora da última alteração do registro''';
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
SELECT 'down SQL query';
|
||||||
@@ -105,4 +105,13 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}).withSchedules({
|
||||||
|
C5: [
|
||||||
|
{
|
||||||
|
command: 'exec procedure',
|
||||||
|
cron: 'expressao cron',
|
||||||
|
name: 'Teste identificador da query',
|
||||||
|
timeout_seconds: 30
|
||||||
|
}
|
||||||
|
]
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
import { createModuleFactory } from "@davinti/jeff";
|
||||||
|
|
||||||
|
const moduleFactory = createModuleFactory(["C5BIG"]);
|
||||||
|
|
||||||
|
export default moduleFactory
|
||||||
|
.createModule({
|
||||||
|
id: "flash-de-perdas",
|
||||||
|
description: "Flash de Perdas",
|
||||||
|
label: "Flash de Perdas",
|
||||||
|
icon: "bar-chart",
|
||||||
|
queries: {
|
||||||
|
flash: {
|
||||||
|
name: "Flash de Perdas",
|
||||||
|
display: {
|
||||||
|
type: "flash",
|
||||||
|
settings: {
|
||||||
|
group_column: "canalapp",
|
||||||
|
total_indicator_column: "is_total",
|
||||||
|
null_label_key: "Geral",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
title_column: "canalapp",
|
||||||
|
value_column: "venda_dia",
|
||||||
|
value_format: "currency",
|
||||||
|
},
|
||||||
|
rows: [
|
||||||
|
{
|
||||||
|
label: "Meta Mês",
|
||||||
|
column: "meta_mes",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "VDA",
|
||||||
|
column: "vda",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "DMA",
|
||||||
|
column: "dma",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Meta Dia",
|
||||||
|
column: "meta_dia",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Meta Margem Dia",
|
||||||
|
column: "meta_margem_dia",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd Clientes",
|
||||||
|
column: "qtd_clientes",
|
||||||
|
format: "integer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Ticket Médio",
|
||||||
|
column: "ticket_medio",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem",
|
||||||
|
column: "margem",
|
||||||
|
format: "percentage",
|
||||||
|
accent: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
params: ["data_venda"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entrypoint: "flash",
|
||||||
|
})
|
||||||
|
.withImplementations({
|
||||||
|
C5BIG: {
|
||||||
|
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`,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).withSchedules({
|
||||||
|
C5BIG: [
|
||||||
|
{
|
||||||
|
command: 'exec procedure',
|
||||||
|
cron: 'expressao cron',
|
||||||
|
name: 'Teste identificador da query',
|
||||||
|
timeout_seconds: 30
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user