Files
app-dono-modulos/migrations/C5/20260529000027_prc_flash_carga_dados_contribuicao.sql

106 lines
9.8 KiB
SQL

-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa IN NUMBER,
p_divisao IN VARCHAR2 DEFAULT NULL,
p_cgos IN VARCHAR2 DEFAULT NULL
) AS
BEGIN
DELETE FROM TB_FLASH_FATO_CONTRIBUICAO
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
INSERT INTO TB_FLASH_FATO_CONTRIBUICAO (
id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana,
id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto,
seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao,
vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento
)
WITH
CGOS AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL))) AS CODGERALOPER FROM DUAL CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL),
DIVISOES AS (SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL))) AS NRODIVISAO FROM DUAL CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL),
CATEG AS (
SELECT DC.SEQFAMILIA, DC.NRODIVISAO,
MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN2,
MAX(CASE WHEN CC.NIVELHIERARQUIA=2 THEN CC.CATEGORIA END) AS CATEGORIAN2,
MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN3,
MAX(CASE WHEN CC.NIVELHIERARQUIA=3 THEN CC.CATEGORIA END) AS CATEGORIAN3,
MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN4,
MAX(CASE WHEN CC.NIVELHIERARQUIA=4 THEN CC.CATEGORIA END) AS CATEGORIAN4,
MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.SEQCATEGORIA END) AS SEQCATEGORIAN5,
MAX(CASE WHEN CC.NIVELHIERARQUIA=5 THEN CC.CATEGORIA END) AS CATEGORIAN5
FROM consinco.MAP_FAMDIVCATEG DC
JOIN DIVISOES DI ON DI.NRODIVISAO=DC.NRODIVISAO
JOIN consinco.MAP_CATEGORIA CC ON CC.SEQCATEGORIA=DC.SEQCATEGORIA AND CC.NRODIVISAO=DC.NRODIVISAO AND CC.TIPCATEGORIA='M' AND CC.NIVELHIERARQUIA BETWEEN 2 AND 5
AND ((CC.NIVELHIERARQUIA=2 AND CC.STATUSCATEGOR IN ('A','F') AND DC.STATUS IN ('A','F')) OR (CC.NIVELHIERARQUIA IN (3,4,5) AND CC.STATUSCATEGOR='A' AND DC.STATUS='A'))
GROUP BY DC.SEQFAMILIA, DC.NRODIVISAO
),
NODO_EMPRESA AS (SELECT codigo, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo),
NODO_PRODUTO AS (SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo='PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase)
SELECT
SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL,
Z.DTA, EXTRACT(YEAR FROM Z.DTA), EXTRACT(MONTH FROM Z.DTA), EXTRACT(DAY FROM Z.DTA),
TO_NUMBER(TO_CHAR(Z.DTA,'D')),
NP.id_nodo, NE.id_nodo, Z.NROEMPRESA, Z.NOMEEMPRESA, Z.SEQPRODUTO, Z.PRODUTO,
Z.SEQPRODUTOBASE, Z.NRODIVISAO, Z.NROSEGMENTO,
Z.QTDE_VENDA, Z.VLR_IMP_VENDA, Z.QTDE_VENDA, Z.VLRCONTRIB,
CASE WHEN Z.QTDE_VENDA>0 THEN Z.VLRVENDA/Z.QTDE_VENDA ELSE NULL END,
Z.PROPQTDPRODUTOBASE, SYSDATE, Z.DESCSEGMENTO
FROM (
SELECT /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.4') */
Y.DTAENTRADASAIDA AS DTA, V.NROEMPRESA, E.NOMEREDUZIDO AS NOMEEMPRESA,
V.NROSEGMENTO, seg1.descsegmento, V.NRODIVISAO, V.SEQPRODUTO, A.SEQPRODUTOBASE,
A.DESCCOMPLETA AS PRODUTO,
CC1.SEQCATEGORIA AS SEQCATEGORIAN1, CC1.CATEGORIA AS CATEGORIAN1,
C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3,
C.SEQCATEGORIAN4, C.CATEGORIAN4, C.SEQCATEGORIAN5, C.CATEGORIAN5,
SUM(V.QTDITEM-NVL(V.QTDDEVOLITEM,0)) AS QTDE_VENDA,
SUM(ROUND(V.VLRITEM,2)-ROUND(V.VLRDEVOLITEM,2)) AS VLRVENDA,
SUM(DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDITEM,0,0,(Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDITEM))-DECODE(V.ACMCOMPRAVENDA,'I',(V.VLRDEVOLITEM*(V.PERCPMF+V.PEROUTROIMPOSTO)/100),DECODE(Y.QTDVDA*V.QTDDEVOLITEM,0,0,(Y.VLRIMPOSTODEVOL-NVL(Y.VLRIPIVDA,0))*DECODE('S','N',1,NVL(A.PROPQTDPRODUTOBASE,1))/Y.QTDVDA*V.QTDDEVOLITEM))+DECODE(V.ACMCOMPRAVENDA,'I',0,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+V.VLRFCPICMS+V.PISITEM+V.COFINSITEM-DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)-V.DVLRFCPICMS-V.PISDEVOLITEM-V.COFINSDEVOLITEM)) AS VLR_IMP_VENDA,
SUM(consinco.fC5_AbcDistribLucratividade('L','L','N',V.VLRITEM,'N',V.VLRICMSST,V.VLRFCPST,V.VLRICMSSTEMPORIG,E.UF,V.UFPESSOA,'S',NULL,'N',V.VLRIPIITEM,V.VLRIPIDEVOLITEM,'N',V.VLRDESCFORANF,Y.CMDIAVLRNF-0,Y.CMDIAIPI,NVL(Y.CMDIACREDPIS,0),NVL(Y.CMDIACREDCOFINS,0),Y.CMDIAICMSST,Y.CMDIADESPNF,Y.CMDIADESPFORANF,Y.CMDIADCTOFORANF,'S',A.PROPQTDPRODUTOBASE,V.QTDITEM,V.VLREMBDESCRESSARCST,V.ACMCOMPRAVENDA,V.PISITEM,V.COFINSITEM,DECODE(V.TIPCGO,'S',Y.QTDVDA,NVL(Y.QTDDEVOL,Y.QTDVDA)),DECODE(V.TIPCGO,'S',Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0),NVL(Y.VLRIMPOSTODEVOL-NVL(V.VLRIPIDEVOLITEM,0),Y.VLRIMPOSTOVDA-NVL(Y.VLRIPIVDA,0))),'N',V.VLRDESPOPERACIONALITEM,Y.VLRDESPESAVDA,'N',NVL(Y.VLRVERBAVDAACR,0),DECODE(V.TIPDOCFISCALCGO,'T',0,Y.QTDVERBAVDA),Y.VLRVERBAVDA-NVL(Y.VLRVERBAVDAINDEVIDA,0),'N',NVL(V.VLRTOTCOMISSAOITEM,0),V.VLRDEVOLITEM,V.VLRDEVOLICMSST,V.DVLRFCPST,V.QTDDEVOLITEM,V.PISDEVOLITEM,V.COFINSDEVOLITEM,V.VLRDESPOPERACIONALITEMDEVOL,V.VLRTOTCOMISSAOITEMDEVOL,E.PERIRLUCRAT,E.PERCSLLLUCRAT,Y.CMDIACREDICMS,DECODE(V.ICMSEFETIVOITEM,0,V.ICMSITEM,V.ICMSEFETIVOITEM)+0,V.VLRFCPICMS,V.PERCPMF,V.PEROUTROIMPOSTO,DECODE(V.ICMSEFETIVODEVOLITEM,0,V.ICMSDEVOLITEM,V.ICMSEFETIVODEVOLITEM)+0,V.DVLRFCPICMS,CASE WHEN 'N'='N' THEN NVL(Y.CMDIAVLRDESCPISTRANSF,0)+NVL(Y.CMDIAVLRDESCCOFINSTRANSF,0)+NVL(Y.CMDIAVLRDESCICMSTRANSF,0)+NVL(Y.CMDIAVLRDESCIPITRANSF,0)+NVL(Y.CMDIAVLRDESCLUCROTRANSF,0)+NVL(Y.CMDIAVLRDESCVERBATRANSF,0) ELSE 0 END,CASE WHEN DV.UTILACRESCCUSTPRODRELAC='S' AND NVL(A.SEQPRODUTOBASE,A.SEQPRODUTOBASEANTIGO) IS NOT NULL THEN COALESCE(PR.PERCACRESCCUSTORELACVIG,NVL(consinco.F_RETACRESCCUSTORELACABC(V.SEQPRODUTO,V.DTAVDA),1)) ELSE 1 END,'N',0,0,'S',V.VLRDESCMEDALHA,'S',V.VLRDESCFORNEC,V.VLRDESCFORNECDEVOL,'N',V.VLRFRETEITEMRATEIO,V.VLRFRETEITEMRATEIODEV,'S',V.VLRICMSSTEMBUTPROD,V.VLRICMSSTEMBUTPRODDEV,V.VLREMBDESCRESSARCSTDEVOL,CASE WHEN 'N'='S' THEN NVL(V.VLRDESCACORDOVERBAPDV,0) ELSE 0 END,NVL(Y.CMDIACREDIPI,0),NVL(V.VLRITEMRATEIOCTE,0),'N','C',V.VLRIPIPRECOVDA,V.VLRIPIPRECODEVOL,V.VLRDESCMEDALHADEVOL,'N')) AS VLRCONTRIB,
CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT,
CAST(0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT, CAST(0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT,
MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE
FROM consinco.MRL_CUSTODIA Y
JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA=V.DTAVDA
JOIN CGOS CG ON CG.CODGERALOPER=V.CODGERALOPER
JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO=V.SEQPRODUTO
JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO=V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO=Y.SEQPRODUTO
JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA=A.SEQFAMILIA AND D.NRODIVISAO=V.NRODIVISAO
JOIN consinco.MAD_SEGMENTO seg1 ON seg1.NRODIVISAO=D.NRODIVISAO AND seg1.NROSEGMENTO=V.NROSEGMENTO AND seg1.STATUS='A'
JOIN DIVISOES DI ON DI.NRODIVISAO=D.NRODIVISAO
JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA=A.SEQFAMILIA AND K.QTDEMBALAGEM=1
JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA=V.NROEMPRESA AND Y.NROEMPRESA=NVL(E.NROEMPCUSTOABC,E.NROEMPRESA)
JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO=DV.NRODIVISAO
JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO=D.NRODIVISAO AND DC.STATUS='A' AND DC.SEQFAMILIA=D.SEQFAMILIA
JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA=DC.SEQCATEGORIA AND CC1.STATUSCATEGOR IN ('A','F') AND CC1.NIVELHIERARQUIA=1 AND CC1.NRODIVISAO=DC.NRODIVISAO AND CC1.TIPCATEGORIA='M'
LEFT JOIN CATEG C ON C.SEQFAMILIA=A.SEQFAMILIA AND C.NRODIVISAO=V.NRODIVISAO
LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO=V.SEQPRODUTO AND PR.DTAMOVIMENTACAO=V.DTAVDA
WHERE V.NROEMPRESA=p_empresa AND V.DTAVDA>=p_data_inicial AND V.DTAVDA<p_data_final+1
AND ((V.TIPTABELA='S' AND V.CGOACMCOMPRAVENDA IN ('S','I')) OR (V.TIPTABELA<>'S' AND V.ACMCOMPRAVENDA IN ('S','I')))
GROUP BY Y.DTAENTRADASAIDA, V.NROEMPRESA, E.NOMEREDUZIDO, V.NRODIVISAO, V.NROSEGMENTO, SEG1.DESCSEGMENTO,
V.SEQPRODUTO, A.SEQPRODUTOBASE, A.SEQFAMILIA, A.DESCCOMPLETA, CC1.SEQCATEGORIA, CC1.CATEGORIA,
C.SEQCATEGORIAN2, C.CATEGORIAN2, C.SEQCATEGORIAN3, C.CATEGORIAN3, C.SEQCATEGORIAN4, C.CATEGORIAN4,
C.SEQCATEGORIAN5, C.CATEGORIAN5
) Z
JOIN NODO_EMPRESA NE ON NE.codigo=TO_CHAR(Z.NROEMPRESA)
JOIN NODO_PRODUTO NP ON NP.codigo=TO_CHAR(Z.SEQPRODUTO) AND NP.cod_empresa=Z.NROEMPRESA AND NVL(NP.seqprodutobase,-1)=NVL(Z.SEQPRODUTOBASE,-1);
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_CONTRIBUICAO';
END IF;
END;
-- +goose StatementEnd