-- +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.NROSEGMENTO, Z.SEQPRODUTO, 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 FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, V.NROEMPRESA, V.NROSEGMENTO, 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 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 ParDataInicial AND ParDataFinal GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) , V.NROEMPRESA , 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.empresa), r.nomeempresa, 1, r.empresa); IF r.codcatn1 IS NOT NULL THEN v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); ELSE v_id_cat1 := v_id_empresa; END IF; IF r.codcatn2 IS NOT NULL THEN v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); ELSE v_id_cat2 := v_id_cat1; END IF; IF r.codcatn3 IS NOT NULL THEN v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); ELSE v_id_cat3 := v_id_cat2; END IF; IF r.codcatn4 IS NOT NULL THEN v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); ELSE v_id_cat4 := v_id_cat3; END IF; IF r.codcatn5 IS NOT NULL THEN v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); ELSE v_id_cat5 := v_id_cat4; END IF; v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); INSERT INTO TB_FLASH_FATO_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.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_contribuicao, r.qtde_contribuicao, r.vlr_contribuicao, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE ); END LOOP; COMMIT; END; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_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